bash変数にスペースを含む引用ファイル名を渡す

bash変数にスペースを含む引用ファイル名を渡す

Bashシェルでは、次の点を考慮してください。

$ x="-name 'foo bar'"
$ find $x
find: paths must precede expression: `bar''
$ find -name 'foo bar'
./foo bar

そのように動作さ$xせるには、何を入れることができますか?find $xfind -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'現在のディレクトリで名前を拡張するためのワイルドカードパターンとして使用されます。

おすすめ記事