使用单引号扩展 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"$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")

相关内容