Tengo una variable que construyo así:
ATTSTR=""
for file in $LOCALDIR/*.pdf
do
ATTSTR="${ATTSTR} -a \"${file}\""
done
La variable ahora contiene (observe los espacios en blanco en el nombre del archivo):
ATTSTR=' -a "/tmp/Testpage - PDFCreator.pdf"'
Y ahora quiero usar esta variable en un comando como este:
mutt -s "Subject" "${ATTSTR}" [email protected]
Pero resulta que se expande así y, por lo tanto, el comando falla (observe las comillas simples agregadas que rodean la variable expandida):
mutt -s "Subject" ' -a "/tmp/Testpage - PDFCreator.pdf"' [email protected]
Quiero que mi variable se expanda sin comillas simples, usando "$ATTSTR"
o $ATTSTR
simplemente es peor. Cómo puedo conseguir esto ?
Respuesta1
Los nombres de archivos son notoriamente poco confiables en cadenas expandidas; resistir esta tentación.
En su lugar, utilice unformaciónpara mantener los nombres de archivos intactos, independientemente de cualquier espacio en blanco:
arr=()
for f in $somedir/*.pdf
do
arr+=( -a "$f")
done
# and for usage/display:
mutt -s mysubject "${a[@]}" some@body
Ver elGuía de Bash sobre matricespara referencia.
Respuesta2
Usar la función de evaluación
command="mutt -s \"Subject\" $ATTSTR [email protected]"
response=$(eval "$command")