bash の任意のコマンドに引数を変数として渡そうとすると、変数値にスペースが含まれていると、bash によって追加された余分な引用符が表示されます。
ファイル「some file.txt」を作成し、変数 $file に追加しています。$file を使用して、別の変数 $arg に格納し、$file を引用符で囲みます。bashによる変数展開の後に私が望んでいるコマンドは
find . -name "some text.txt"
しかし、エラーが発生し、実際に実行されたファイルは、
find . -name '"some' 'file.txt"
なぜこうなった。この場合、bash 変数 expanson はどのように機能しますか?
$ touch "some file.txt"
$ file="some file.txt"
$ arg=" -name \"$file\""
$ find . $arg
find: paths must precede expression: file.txt"
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ set -x
$ find . $arg
+ find . -name '"some' 'file.txt"'
find: paths must precede expression: file.txt"
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
なぜこれが起こっているのですか?