bash 变量用单引号扩展的问题

drc*_*lus 4 scripting linux bash

我有一个像这样构建的变量:

ATTSTR=""
for file in $LOCALDIR/*.pdf
do
  ATTSTR="${ATTSTR} -a \"${file}\""
done
Run Code Online (Sandbox Code Playgroud)

变量现在包含(注意文件名中的空格):

ATTSTR=' -a "/tmp/Testpage - PDFCreator.pdf"'
Run Code Online (Sandbox Code Playgroud)

现在我想在这样的命令中使用这个变量:

mutt -s "Subject" "${ATTSTR}" recipient@example.ec
Run Code Online (Sandbox Code Playgroud)

但事实证明它像这样扩展,因此命令失败(注意扩展变量周围添加的单引号):

mutt -s "Subject" ' -a "/tmp/Testpage - PDFCreator.pdf"' recipient@example.ec
Run Code Online (Sandbox Code Playgroud)

我希望我的变量在没有单引号的情况下扩展,使用"$ATTSTR"$ATTSTR只是更糟。我怎样才能做到这一点?

ada*_*ptr 7

众所周知,扩展字符串中的文件名不可靠;抵制这种诱惑。

取而代之的是,使用数组来保持文件名不变,而不管任何空格:

arr=()
for f in $somedir/*.pdf
do
arr+=( -a "$f")
done

# and for usage/display:

mutt -s mysubject "${a[@]}" some@body
Run Code Online (Sandbox Code Playgroud)

请参阅有关数组Bash 指南以供参考。