Linux
使用單引號擴展 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"
or$ATTSTR
更糟。我怎樣才能做到這一點?
眾所周知,擴展字元串中的文件名不可靠;抵制這種誘惑。
相反,請使用數組來保持文件名完整,而不管任何空格:
arr=() for f in $somedir/*.pdf do arr+=( -a "$f") done # and for usage/display: mutt -s mysubject "${a[@]}" some@body
請參閱有關數組的 Bash 指南以供參考。
使用評估功能
command="mutt -s \"Subject\" $ATTSTR recipient@example.ec" response=$(eval "$command")