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