命令的多行输出不会按预期将元素分配给bash数组

时间:2015-08-25 17:32:05

标签: arrays linux bash

我尝试使用命令中的输出将元素分配给数组。我发现的每个例子看起来都很完美,而我的代码只显示了一个看起来格格不入的元素。

这是输出格式正确的命令。

[root@probe-eno16777736 nst]# tac "/hns/test_cfg" | sed -n -e "/ip address/,/\!/ p" | grep -B1 "\!" | sed '/!/d' | sed '/\-\-/d'
interface GigabitEthernet0
interface GigabitEthernet0/0/3
interface GigabitEthernet0/0/2.3249
interface GigabitEthernet0/0/2.470
interface GigabitEthernet0/0/2
interface GigabitEthernet0/0/1.3249
interface GigabitEthernet0/0/1.470
interface GigabitEthernet0/0/1
interface GigabitEthernet0/0/0.3419
interface GigabitEthernet0/0/0
interface Loopback32491
interface Loopback3249
interface Loopback470

这里我将输出分配给名为" A"

的数组
[root@probe-eno16777736 nst]# A=($(tac "/hns/test_cfg" | sed -n -e "/ip address/,/\!/ p" | grep -B1 "\!" | sed '/!/d' | sed '/\-\-/d'))

这里我尝试验证从命令输出的每一行是数组的一个元素,显然情况并非如此。

[root@probe-eno16777736 nst]# echo ${A[@]}
 interface Loopback47091et0/0/0.3419

1 个答案:

答案 0 :(得分:0)

您应该使用正确的IFS

IFS=$'\n' declare -a arr=($(tac "/hns/test_cfg" | sed -n -e "/ip address/,/\!/ p" | 
                           grep -B1 "\!" | sed -e '/!/d' -e '/--/d' -e 's/\r//'))

IFS=$'\n'会在填充数组arr时将输入拆分为换行符。

打印数组:

printf "%s\n" "${arr[@]}"