私のマスクはスクリプトパラメータと検索ツールパラメータで構成されています。
$mopt=false
case $1 in
...
-m|--mask-file)
if $mopt; then
or="-o"
fi
mask+=("$or -name $2 ")
mopt=true
shift 2;;
...
find . "${mask[@]}"
=>
+ find . '-name *.cpp -o -name *.txt'
拡張はありませんが、すべてのパラメータの周りにアポストロフィがあるため失敗します。 $ maskに引用符がある場合は展開してください。
引用符を追加すると、検索ツールのパラメータを生成することはすでに困難です。
$mask+=("$or -name \"$2\" ")
find . {$mask[@]}
=>
+ find . -name '"*.cpp"' -o -name '"*.txt"'
- 名前 ''*.cpp'' -o - 名前 '"*.txt"'
マスクの周りに二重引用符を使用して実行される検索ツールも失敗します。手動でスクリプトを作成する場合:
find . -name "${mask[0]}" -o -name "${mask[1]}"...
コマンドは正しく実行されますが、可変数のマスクを入力できるように、照会パラメーターの名前を自動的に作成する必要があります。それでは、スタックの順序を見つけて次のように入力する必要がありますか?
find . $mask ...
答え1
(「-o」)、「-name」、「$2」など、検索するパラメータを2つまたは3つにしたいので、次のようにします。
mopt=false
case $1 in
...
-m|--mask-file)
"$mopt" || mask+=(-o)
mask+=(-name "$2")
mopt=true
shift 2;;
find . "${mask[@]}"