![如何防止扩展](https://linux22.com/image/64459/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E6%89%A9%E5%B1%95.png)
我的掩码上的脚本参数和查找工具的参数组成:
$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"'
-name '' * .cpp '' -o -name '"* .txt"'
查找工具在掩码周围使用双引号执行,也失败。如果您将脚本手动写入脚本:
find . -name "${mask[0]}" -o -name "${mask[1]}"...
命令正确执行,但我需要自动为查找参数创建一个名称,以便您可以输入可变数量的掩码。怎么办,然后找到stack的顺序就可以进入了:
find . $mask ...
答案1
您希望它是 2 或 3 个要查找的参数:("-o")、"-name" 和 "$2",因此:
mopt=false
case $1 in
...
-m|--mask-file)
"$mopt" || mask+=(-o)
mask+=(-name "$2")
mopt=true
shift 2;;
find . "${mask[@]}"