Назад | Перейти на главную страницу

Проблемы с расширением переменной bash одинарными кавычками

У меня есть переменная, которую я создаю так:

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 по массивам для справки.