Problemas com a expansão da variável bash com aspas simples

Problemas com a expansão da variável bash com aspas simples

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")

informação relacionada