为什么Linux shell脚本read-to-array命令提供的元素多于必需的元素



为什么对给定的输入(a-b [c=d.e] <f g>(执行Linux shell命令会产生额外的元素(3:''(?

命令:

echo "a-b [c=d.e] <f g>" | while IFS=" []<>=" read -a arr; do for ((i=0;i<${#arr[@]};i++)) do echo "${i}:'${arr[${i}]}'"; done; done

预期输出:

0:'a-b'
1:'c'
2:'d.e'
3:'f'
4:'g'

实际输出:

0:'a-b'
1:'c'
2:'d.e'
3:''
4:'f'
5:'g'

仅使用显示的样本(以防您对awk满意(。为了获得预期的输出,您可以在单个awk中完成此操作,请尝试以下操作。简单的解释是:根据显示的样本/OP的需要创建不同的字段分隔符,然后遍历当前行的所有字段,只打印所需的字段。

echo "a-b [c=d.e] <f g>" |
awk -v s1="'" -F'[ \[=\]><]' '{for(i=1;i<=NF;i++){if($i){print count++":"s1 $i s1}}}'

对于所示的样本,输出如下。

0:a-b
1:c
2:d.e
3:f
4:g

最新更新