これらは宣伝どおりに機能します。
grep -ir 'hello world' .
grep -ir hello\ world .
これらはしません:
argumentString1="-ir 'hello world'"
argumentString2="-ir hello\\ world"
grep $argumentString1 .
grep $argumentString2 .
2 番目の例では引用符'hello world'
で囲まれていますが、grep は (and ) を 1 つの引数として解釈し'hello
、hello\
( world'
and world
) を別の引数として解釈します。つまり、この場合、'hello
が検索パターンworld'
になり、検索パスになります。
繰り返しますが、これは引数がargumentString
変数から展開された場合にのみ発生します。最初の例では、 grep は'hello world'
(およびhello\ world
) を単一の引数として適切に解釈します。
これがなぜなのか説明できる人はいますか?シェルコマンドによって正しく解釈されるように、各文字の構文を保持する文字列変数を展開する適切な方法はありますか?