如何防止扩展

如何防止扩展

我的掩码上的脚本参数和查找工具的参数组成:

$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[@]}"

相关内容