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 ...