将某些内容附加到列表的每个元素

时间:2015-11-18 20:35:15

标签: bash

我有一份文件清单(通过电子邮件发送)。我需要追加" -a"到列表的每个元素(这是一个mutt要求)。

我试过了:

attachment+=(../*.log) 
attachments+=(-a "${attachment[@]}" )

但回声显示-a只追加一次(开头)。我如何获得如下结果?

-a file1.log -a file2.log -a file3.log ...

此问题出现here

2 个答案:

答案 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可以防止名称中包含空格的文件/路径。

最后,$(...)(替换旧的弃用的反引号`运算符)将所有命令输出放回到平面列表中(单行)。