我有一个像这样构建的变量:
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")