在 Bash 中,如果你想让一个变量引用或“指向”另一个变量(数组),你可以使用间接引用的概念。对于你的场景,你可以将变量 a
设为数组名 eb2_info
的字符串值,然后在需要引用数组时使用间接引用。
#!/bin/bash
# 定义数组 eb2_info
eb2_info="192.168.1.3 localfile2.txt /remote/path2 remotefile2.txt myusername2 mypassword2"
# 将变量 a 设置为 eb2_info 的名称
a="eb2_info"
echo ${eb2_info}
echo ${!a}
!a
将 a
的值替换为 a
中的字符串(在这种情况下是 "eb2_info"
),${!a}间接访问了${eb2_info}
错误案例
#!/bin/bash
# 定义数组 eb2_info
eb2_info=(
"192.168.1.3 localfile2.txt /remote/path2 remotefile2.txt myusername2 mypassword2"
"192.168.1.4 localfile2.txt /remote/path2 remotefile2.txt myusername2 mypassword2"
)
# 将变量 a 设置为 eb2_info 的名称
a="eb2_info"
# 使用间接引用来访问数组
# 这里我们遍历由 a 指向的数组
for task in "${!a[@]}"; do
echo "$task"
done
当你创建了一个名为 a
的变量,且给它赋值为 "eb2_info"(即数组的名称),${a}
会被替换成 "eb2_info",${!a[@]}
将尝试解引用 "eb2_info" 作为数组的名字,并取得其索引列表。但在Bash中这种间接引用的语法实际上是无法工作的,因为 ${!a[@]}
尝试获取的是名为 "eb2_info" 的数组的索引,而不是数组的内容。
"${eb2_info[@]}"
表达式获取的是数组 eb2_info
的所有元素内容。
所以在你的脚本中,如果你想使用变量 a
来间接引用数组 eb2_info
,使用 "${!a[@]}"
是不正确的,因为这将尝试访问一个名为 "eb2_info[@]" 的变量,这并不存在。