这是我的功能,我正在读取文件,按空格分割每一行并创建一个数组。我想使用数组中的第一个和第二个元素作为关键数组的键和值。第一个元素是IP地址。
function testRead {
NEWHOST_IPS_OUT=<my_file>
declare -a HOSTS_IP_ARR
while read line
do
if [[ -z "$line" ]] || [[ "$line" =~ "#" ]]; then
continue
fi
STR_ARRAY=($line)
HOST_IP=${STR_ARRAY[1]}
HOST_AZ=${STR_ARRAY[2]}
HOSTS_IP_ARR["$HOST_IP"]="${HOST_AZ}"
HOSTS_IP_ARR[hello]=2
done < "$NEWHOST_IPS_OUT"
}
问题&amp;调查结果:
* declare -A doesn't work, using `GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)`
./ test.sh:line 4:声明:-A:无效选项 声明:用法:声明[-afFirtx] [-p] [name [= value] ...]
* I tested with constant values using '-a' for an associative array. It worked
* On running this script I get the following error:
./ test.sh:line 14:127.0.0.1:语法错误:算术运算符无效(错误标记为“.0.0.1”)
This is line 14: HOSTS_IP_ARR["$HOST_IP"]="${HOST_AZ}"
答案 0 :(得分:1)
declare -a
创建一个常规的非关联数组。
它似乎是关联的:
declare -a arr
arr["somekey"]=42
echo "${arr["somekey"]}" # gives 42
但是
arr["someotherkey"]=1000
echo "${arr["somekey"]}" # now gives 1000
这是因为"somekey"
和"someotherkey"
被解释为算术表达式。 Bash尝试将它们查找为变量名称,找到它们未设置,因此将值视为0
。
127.0.0.1
是一个无效的算术表达式,这就是你得到那个错误的原因。
答案 1 :(得分:1)
declare -A doesn't work, using `GNU bash, version **3.2.25(1)-release** (x86_64-redhat-linux-gnu)`
有你的问题。关联数组仅在版本4中引入bash。