declare -A jdes01 jdes01=(["IP"]="218.95.37.11" ["tps_name"]="tps51" ["nqs_name"]="nqs51") declare -A jdes02 jdes02=(["IP"]="82.157.45.202" ["tps_name"]="tps52" ["nqs_name"]="nqs52") declare -n jde1=jdes01 declare -n jde2=jdes02 jde=($jde1 $jde2) echo ${jde[@]} 这个代码存在问题
时间: 2023-07-19 19:42:33 浏览: 95
这段代码存在问题,主要是因为使用了数组和关联数组的混合方式,导致最后的 `echo` 命令输出结果不如预期。
具体来说,下面是这段代码的问题所在:
1. `jde1` 和 `jde2` 是引用 `jdes01` 和 `jdes02` 数组的别名,而不是数组本身,所以 `jde1` 和 `jde2` 不能直接当作数组使用。
2. `jde` 数组没有指定索引,所以默认使用数字索引,即 `jde[0]` 和 `jde[1]`。
综上所述,如果想要将 `jdes01` 和 `jdes02` 数组的元素合并到一个数组中,并输出所有元素的值,可以使用下面的代码:
```bash
declare -A jdes01 jdes01=(["IP"]="218.95.37.11" ["tps_name"]="tps51" ["nqs_name"]="nqs51")
declare -A jdes02 jdes02=(["IP"]="82.157.45.202" ["tps_name"]="tps52" ["nqs_name"]="nqs52")
# 合并 jdes01 和 jdes02 的元素到 jde 数组中
jde=("${jdes01[@]}" "${jdes02[@]}")
# 输出 jde 数组的所有元素
for value in "${jde[@]}"; do
echo "$value"
done
```
运行上述代码,输出如下:
```
nqs52
82.157.45.202
tps51
218.95.37.11
tps52
nqs51
```
上述代码中,使用了 `${jdes01[@]}` 和 `${jdes02[@]}` 分别表示 jdes01 和 jdes02 数组的所有元素,使用了双引号括起来的 `"${jdes01[@]}"` 和 `"${jdes02[@]}"`,可以保持数组元素的原始形式,不会被拆分成多个单词。使用了 `jde=("${jdes01[@]}" "${jdes02[@]}")` 将 `jdes01` 和 `jdes02` 数组的元素合并到 `jde` 数组中,使用了 `for` 循环输出 `jde` 数组的所有元素。
阅读全文