Bashシェルでは、次の点を考慮してください。
$ x="-name 'foo bar'"
$ find $x
find: paths must precede expression: `bar''
$ find -name 'foo bar'
./foo bar
そのように動作さ$x
せるには、何を入れることができますか?find $x
find -name 'foo bar'
ベストアンサー1
単一の文字列に別の内容(-name
および)を入れないでください。foo bar
代わりに配列を使用してください。
args=( -name 'foo bar' )
find . "${args[@]}"
配列変数拡張の引用符は、各要素が個別に引用されることを保証します。これにより、これが単一のパラメータであることがfoo bar
保証されます。
位置パラメータも使用できます。
set -- -name 'foo bar'
find . "$@"
繰り返しますが、引用は"$@"
不可欠です。
-name 'foo bar'
変数を入れて引用符なしで使用すると、find
シェルは値をスペース、タブ、および改行で除算します。これはfind
、ユーティリティがパラメータとを取得したこと-name
を'foo
意味しますbar'
。bar'
パラメータがわからないのでfind
文句を言います。
文字列にワイルドカードパターン(たとえば)がある場合、-name '*.txt'
シェルはそれを-name
合計に分割'*.txt'
し、'*.txt'
現在のディレクトリで名前を拡張するためのワイルドカードパターンとして使用されます。