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”或$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以供参考.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...