我搜索了高低的答案,但解决方案继续逃避我。以下是我在本地服务器上运行的snmpbulkwalk
的结果。
snmpbulkwalk -v2c -Oqs -m EGT-VIPr-TRx -c <community> <ip> egtViprOutputMuxSecDestPort | sed -e 's/egtViprOutputMuxSecDestPort\.//g'
Output
1 2001
4 2002
5 2003
8 2004
我的目标是将此输出分配给bash中的关联数组(ex array[1]=2001, array[4]=2002, ...
)。下面是我在过去将snmpbulkwalk
输出分配给标准数组时使用的代码。但是我对关联数组没有成功。
declare -A array
array=($(snmpbulkwalk -v2c -Oqs -m EGT-VIPr-TRx -c <community> <ip> egtViprOutputMuxSecDestPort | sed -e 's/egtViprOutputMuxSecDestPort\.//g'))
echo ${array[1]}
Output
array: 1: must use subscript when assigning associative array
array: 2001: must use subscript when assigning associative array
array: 2: must use subscript when assigning associative array
array: 2002: must use subscript when assigning associative array
array: 3: must use subscript when assigning associative array
array: 2003: must use subscript when assigning associative array
array: 4: must use subscript when assigning associative array
array: 2004: must use subscript when assigning associative array
非常感谢任何协助。
答案 0 :(得分:0)
我找到了一个可行的解决方案,我发布了答案供将来参考。经过多次试验和错误,while read
循环完成了我的最终目标。
declare -A array
while read id value; do
array[$id]=$value
done < <(snmpbulkwalk -v2c -Oqs -m EGT-VIPr-TRx -c <community> <ip> egtViprOutputMuxSecDestPort | sed -e 's/egtViprOutputMuxSecDestPort\.//g')
echo ${array[1]}
Output
2001
我在将snmpbulkwalk
的输出读取到我的循环中的语法方面有些挣扎,但上面的代码在我的场景中完美运行。