加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 02:48:09 所属栏目:Linux 来源:网络整理
导读:我有一个我这样构建的变量: ATTSTR=""for file in $LOCALDIR/*.pdfdo ATTSTR="${ATTSTR} -a "${file}""done 该变量现在包含(注意文件名中的空格): ATTSTR=' -a "/tmp/Testpage - PDFCreator.pdf"' 现在我想在这样的命令中使用这个变量: mutt -s "Subjec
我有一个我这样构建的变量:
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”或$ATTSTR更糟糕.
我怎样才能做到这一点?

解决方法

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

而是使用数组来保持文件名不变,无论任何空格如何:

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

# and for usage/display:

mutt -s mysubject "${a[@]}" some@body

请参阅Bash Guide on Arrays以供参考.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读