2012-01-05 39 views
2

我试图让SNMP走进一个数组,变量中的数据格式为"data1 data2""data3 data4"。基本上我只是希望双引号之间的数据,不管有多少空格。如何从命令变量在bash中创建数组?

我一直在谷歌约一个半小时,无法弄清楚如何获得正确格式的数组。

这里是我现在所拥有的代码的SNIPPIT ...

IN=$(snmpwalk -Oqv -v2c -c$community $ipaddr .1.3.6.1.4.1.32050.2.1.26.2) 
portdesc=($(echo $IN)) 

这并把它放在一个阵列,但在尝试访问第一个数据集时,我得到"data1而不是"data1 data2"。我可以欺骗并使用两个变量,但我宁愿按照正确的方式进行操作,只需引用阵列中的项目即可。 如果你能帮助我,我将永远是伟大的。

echo "DEBUG0: ${portdesc[@]}" 
echo "DEBUG1: ${portdesc[0]}" 

DEBUG0: "Relay Output" "Expansion Power" "Expansion Tripped" "Switch Input" "Radio 1 Power" "Radio 2 Power" "Radio 3 Power" "Radio 4 Power" "Radio 1 Sync" "Radio 2 Sync" "Radio 3 Sync" "Radio 4 Sync" "Radio 1 Tripped" "Radio 2 Tripped" "Radio 3 Tripped" "Radio 4 Tripped" "SyncPipe Power" "SyncPipe Tripped" "Switch to NMEA" "2D Fix" "3D Fix" "DGPS Fix" "1PPS Active" "Radio 1 Power" "Radio 2 Power" "Radio 3 Power" "Radio 4 Power" "Radio 1 Sync" "Radio 2 Sync" "Radio 3 Sync" "Radio 4 Sync" "Radio 1 Tripped" "Radio 2 Tripped" "Radio 3 Tripped" "Radio 4 Tripped" "SyncPipe Power" "SyncPipe Tripped" "Switch to NMEA" "2D Fix" "3D Fix" "DGPS Fix" "1PPS Active" "Radio 1 Power" "Radio 2 Power" "Radio 3 Power" "Radio 4 Power" "Radio 1 Sync" "Radio 2 Sync" "Radio 3 Sync" "Radio 4 Sync" "Radio 1 Tripped" "Radio 2 Tripped" "Radio 3 Tripped" "Radio 4 Tripped" "SyncPipe Power" "SyncPipe Tripped" "Switch to NMEA" "2D Fix" "3D Fix" "DGPS Fix" "1PPS Active" 

DEBUG1: "Relay 

SNMP命令将从CLI

$ snmpwalk -O qv -v2c -c<community> <ip> .1.3.6.1.4.1.32050.2.1.26.2 
"Relay Output" 
"Expansion Power" 
"Expansion Tripped" 
"Switch Input" 
"Radio 1 Power" 
"Radio 2 Power" 
"Radio 3 Power" 
"Radio 4 Power" 
"Radio 1 Sync" 
"Radio 2 Sync" 
"Radio 3 Sync" 
"Radio 4 Sync" 
"Radio 1 Tripped" 
"Radio 2 Tripped" 

回答

6

如果你给出的例子输入我更了解这个(我不知道是什么snmpwalk的输出样子)。但根据我的理解,您期望数组仅在换行符处分割文本,而不是在空格处。默认情况下,bash在空格,制表符和换行符处分割。要改变这种行为,你可以修改的IFS值( NPUT ˚F ield 小号 eparator):

OLDIFS="$IFS" 
IFS=$'\n'  # newlines are the only separator 
IN=($(my_command ...)) 
IFS="$OLDIFS" 

额外的两行保存和恢复IFS的值,如果其他部位的脚本依赖于它。

(顺便说一句,如果你谷歌“的bash阵列换行”你会发现有些事情解释这一点。)

+0

查看原文职位SNMP输出 – Chris 2012-01-05 23:47:24

+0

@克里斯:我所有请参阅解析它的结果。我认为这与它被换行符分隔是一致的。如果你发布实际的示例输入,它会很有帮助(假设我还没有回答你的问题)。 – mrj 2012-01-05 23:49:30

+0

花了我一分钟来弄清楚你在问什么。再次编辑原始文章,这次可能有用的信息。 :) – Chris 2012-01-05 23:54:36