如何与heredoc一起进行过程替换

问题描述 投票:1回答:1

想做:

del_comments(){ sed 's/\s*#.*//;/^\s*$/d'; }

readarray -t arr < <( del_comments <<'EOF' )
a       # comm1
b       # comm2
# comm3
c
EOF    
printf "[%s]\n" "${arr[@]}"

它抱怨“EOF”的位置很差。如何正确编写以上内容?

想要通过HEREDOC函数处理del_comments,结果应该去mapfile读取数组arr中的行。

想要输出(从打印数组arr)

[a]
[b]
[c]
bash syntax heredoc
1个回答
4
投票

编写命令的正确方法是:

readarray -t arr < <( del_comments <<EOF
a       # comm1
b       # comm2
# comm3
c
EOF
)

确保EOF自己在线上,没有任何前导或尾随空格。

可能需要将您的功能重写为:

del_comments() { sed 's/[  ]*#.*//; /^$/d'; }
  • [ ]应该包含一个空格和一个标签。
© www.soinside.com 2019 - 2024. All rights reserved.