Problemas com a variável bash expandindo com aspas simples

3

Eu tenho uma variável que eu construo assim:

ATTSTR=""
for file in $LOCALDIR/*.pdf
do
  ATTSTR="${ATTSTR} -a \"${file}\""
done

A variável agora contém (observe os espaços em branco no nome do arquivo):

ATTSTR=' -a "/tmp/Testpage - PDFCreator.pdf"'

E agora eu quero usar essa variável em um comando como este:

mutt -s "Subject" "${ATTSTR}" [email protected]

Mas acontece que ele se expande assim e, assim, o comando falha (observe as aspas simples adicionadas ao redor da variável expandida):

mutt -s "Subject" ' -a "/tmp/Testpage - PDFCreator.pdf"' [email protected]

Eu quero minha variável expandida sem as aspas simples, usando "$ATTSTR" ou $ATTSTR é apenas pior. Como posso conseguir isso?

    
por drcelus 23.08.2012 / 13:07

1 resposta

7

Os nomes dos arquivos são notoriamente não confiáveis em strings expandidas; resistir a esta tentação.

Em vez disso, use uma matriz para manter os nomes de arquivos intactos, independentemente de qualquer espaço em branco:

arr=()
for f in $somedir/*.pdf
do
arr+=( -a "$f")
done

# and for usage/display:

mutt -s mysubject "${a[@]}" some@body

Consulte o Guia do Bash sobre matrizes para referência.

    
por 23.08.2012 / 13:35