У меня есть переменная, которую я создаю так:
ATTSTR=""
for file in $LOCALDIR/*.pdf
do
ATTSTR="${ATTSTR} -a \"${file}\""
done
Теперь переменная содержит (обратите внимание на пробелы в имени файла):
ATTSTR=' -a "/tmp/Testpage - PDFCreator.pdf"'
А теперь я хочу использовать эту переменную в такой команде:
mutt -s "Subject" "${ATTSTR}" recipient@example.ec
Но оказывается, что он расширяется вот так, и поэтому команда не работает (обратите внимание на добавленные одинарные кавычки, окружающие расширенную переменную):
mutt -s "Subject" ' -a "/tmp/Testpage - PDFCreator.pdf"' recipient@example.ec
Я хочу, чтобы моя переменная была расширена без одинарных кавычек, используя "$ATTSTR"
или $ATTSTR
просто хуже. Как я могу этого добиться?
Известно, что имена файлов в расширенных строках ненадежны; сопротивляться этому искушению.
Вместо этого используйте массив чтобы имена файлов оставались неизменными, независимо от пробелов:
arr=()
for f in $somedir/*.pdf
do
arr+=( -a "$f")
done
# and for usage/display:
mutt -s mysubject "${a[@]}" some@body
Увидеть Руководство Bash по массивам для справки.