我有一份文件清单(通过电子邮件发送)。我需要追加" -a"到列表的每个元素(这是一个mutt要求)。
我试过了:
attachment+=(../*.log)
attachments+=(-a "${attachment[@]}" )
但回声显示-a只追加一次(开头)。我如何获得如下结果?
-a file1.log -a file2.log -a file3.log ...
此问题出现here。
答案 0 :(得分:0)
您可以在BASH 4中使用mapfile
命令printf
:
mapfile -t attachments < <(printf -- '-a %s\n' "${attachment[@]}")
printf
会在-a
数组中的每个数组元素之前添加attachment
。
假设您的文件名中没有换行符。
答案 1 :(得分:0)
试试这个:
mutt $(ls ../*.log|while read f;do echo -a \"$f\";done) ...
根据jpaugh的评论解释:
在管道ls
中使用|
(而不是单独使用)时,它会为每行放置一个文件(而不是制作表格)。
while read <var>;do ... done
是一个标准的shell模式,用于从输入读取单行(到var)。
在文件名"
周围放置$f
可以防止名称中包含空格的文件/路径。
最后,$(...)
(替换旧的弃用的反引号`运算符)将所有命令输出放回到平面列表中(单行)。