Eu tenho uma variável que 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 quero usar esta variável em um comando como este:
mutt -s "Subject" "${ATTSTR}" [email protected]
Mas acontece que ele se expande assim e, portanto, o comando falha (observe as aspas simples adicionadas ao redor da variável expandida):
mutt -s "Subject" ' -a "/tmp/Testpage - PDFCreator.pdf"' [email protected]
Quero que minha variável seja expandida sem aspas simples, usando "$ATTSTR"
or $ATTSTR
é apenas pior. Como posso conseguir isso?
Responder1
Os nomes de arquivos são notoriamente não confiáveis em strings expandidas; resista a esta tentação.
Em vez disso, use umvariedadepara manter os nomes dos 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
Veja oGuia Bash em matrizespara referência.
Responder2
Usar função de avaliação
command="mutt -s \"Subject\" $ATTSTR [email protected]"
response=$(eval "$command")