shell变量引用

在 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[@]" 的变量,这并不存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值