A=\"\" grep $A が grep "" のように動作しないのはなぜですか?

A=\

私はLinuxでbashを使用しています。

$ A=\"\"
$ grep $A
nomatch
""
""                         <- (returned by grep)
$ grep ""
imatcheverything
imatcheverything           <- (returned by grep)

grep $A私はそのように行動すると予想されたgrep ""。文字通り一致するのはなぜですか""grepたとえば、(私が知っている限り)シェルgrep \\\\は最初にシェルを見てからgrep \\。行が含まれています\

私はこれがシェルが変数を置き換えて引用符を見る順序に関連していると思います。この動作は、変数置換フェーズの前にシェルが引用符を削除した場合に説明できます。


無関係なメモでは、私は比較的複雑な正規表現(書き込みではなく読み取り、理想的には「この正規表現の機能は何ですか?」と尋ねること)を持つリソースを探しており、BREまたはEREが望ましいです。

ベストアンサー1

Bashは引数拡張後の引用符を評価しません。拡張値のみ処理噴射そしてファイル名拡張子変数を引用符で囲まないと、引用符は再解釈されなくなります。 IFSやglob以外の値と同様に、「単語」の一部になります。あなたの例では、Bashは""単語分割やglobパターンではないので、引数をgrepにそのまま渡します。

おすすめ記事