-pathまたは-iregex検索オプションの文字列変数にスペースを含めることはできません。
この入力は'/home/demo.*/\.config/File System/.*t$'
次に供給されます。
read i
m="-iregex $i"
find ~ $m
変数では
なく定数であれば動作しないので、いいえ、正しい解決策は何ですか?find ~ \'$m\'
eval find ~ \'$m\'
答え1
データを含む文字列変数に操作を入れないでください(参照:バッシュFAQ 50)。変数を使用するときは常に二重引用符を使用してください。
i='/home/demo.*/\.config/File System/.*t$'
find ~ -iregex "$i"
-iregex
空でない場合に一意の項目を含めるには、$i
次のようにします。維持しますが、正規表現を次のように置き換えます.*
(たとえば、何でも)。
find ~ -iregex "${i-.*}"
bash
(しかし)sh
などの配列を理解するシェルを使用している場合は、-iregex
必要なときにのみ含めるようにシェルを使用できます。
IFS= read -r i
findRegex=()
[[ -n "$i" ]] && findRegex=('-iregex' "$i")
find ~ "${findRegex[@]}"
ここで何が起こっているのかを確認するには、読み取りと検索を編集するか、find
役立つことがあります。echo find
man bash
Arrays
@
read i
またに変更しましたIFS= read -r i
。これにより、シェルが入力データを解析できなくなり、複数の$IFS
スペース(正確には文字)やその他の文字の組み合わせを含む式が壊れる可能性があります。