Como evitar a expansão

0

Meus parâmetros de script na máscara e consistem em parâmetros para a ferramenta de localização:

$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'

Embora não seja expandido, mas falha porque os apóstrofos em torno de todos os parâmetros. Quando a máscara $ tiver cotações, expande-se.

Se eu adicionar aspas já com força na criação de parâmetros para a ferramenta de localização:

$mask+=("$or -name \"$2\" ")
find . {$mask[@]}
=>
+ find . -name '"*.cpp"' -o -name '"*.txt"'

-name '' * .cpp '' -o -name '"* .txt"'

A ferramenta Localizar é executada com aspas duplas ao redor da máscara e também falha. Se você escrever um script manualmente no script:

find . -name "${mask[0]}" -o -name "${mask[1]}"...
O comando

é executado corretamente, mas eu preciso criar um nome para os parâmetros de localização automaticamente, para que você possa inserir um número variável de máscaras. Como, em seguida, encontrar pilha a ordem pode ser inserida:

find . $mask ...
    
por user113201 05.05.2015 / 16:23

1 resposta

2

Você quer que sejam 2 ou 3 argumentos para encontrar: ("-o"), "-name" e "$ 2", de modo que:

mopt=false
case $1 in
...
    -m|--mask-file)     
            "$mopt" || mask+=(-o)
            mask+=(-name "$2")
            mopt=true
            shift 2;;

find . "${mask[@]}"
    
por 09.05.2015 / 17:44