Проблемы с расширением переменных bash с помощью одинарных кавычек

Проблемы с расширением переменных bash с помощью одинарных кавычек

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

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

Связанный контент