Se você quiser que o globbing seja executado na expansão do parâmetro (que, a propósito, é executado pelo shell, antes de chamar o comando; o comando vê os arquivos resultantes, não o padrão), é aí que você deixaria o parâmetro expansão sem aspas.
Deixar uma expansão de parâmetro sem aspas indica tanto a divisão de palavras quanto a globulação (às vezes chamada de divisão conceitual + operador glob). Aqui, você quer apenas a parte de globbing, então você precisa desabilitar a parte de divisão (atribuindo um valor vazio à variável $IFS
especial):
IFS= # disable splitting
for i in ./*\ P1.tif; do
match=${i/\ P1/\ P*}
out=${i/\ P1/}
echo "processing $match"
tiffcp $match "$out" # split+glob on $match
done
Isso pressupõe que a parte principal do nome do arquivo não contenha caracteres curinga. Alternativamente, você poderia fazer:
for i in ./*\ P1.tif; do
prefix=${i%\ P1.tif}
out=$prefix.tif
echo "processing $prefix"
tiffcp "$prefix P"*.tif "$out"
done
Dessa forma, somente esse *
é considerado como um operador glob, e esse código também tem a vantagem de usar apenas a sintaxe sh padrão.
Note que as expansões glob são classificadas lexicalmente, então P10 viria antes de P2. Use zsh
e sua opção numericglobsort
(ou n
qualifier glob) para classificação numérica.