我尝试使用命令中的输出将元素分配给数组。我发现的每个例子看起来都很完美,而我的代码只显示了一个看起来格格不入的元素。
这是输出格式正确的命令。
[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
答案 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[@]}"