标签: indirection

引号中的命令替换不能用于调用变量

说:

variable="Something that it holds"
Run Code Online (Sandbox Code Playgroud)

然后 echo "$variable"将输出:它持有的东西

但是说我也这样做:

var2="variable";  
echo "\$$(echo $var2)"
Run Code Online (Sandbox Code Playgroud)

只会输出:$variable
而不是:它持有的东西

谁能告诉我 Unix 的什么特性在起作用,在这里?

shell command-substitution indirection

4
推荐指数
3
解决办法
554
查看次数

使用 bash 变量间接访问时如何访问数组的更多成员?

考虑以下示例,它似乎与 index 一起工作正常0

$ a1=(1 2 3)
$ a2=(a b c)
$ for x in a1 a2; do echo "${!x}"; done
1
a
$ for x in a1 a2; do echo "${!x[0]}"; done
1
a
Run Code Online (Sandbox Code Playgroud)

但是对于索引,1它什么也不打印:

$ for x in a1 a2; do echo "${!x[1]}"; done    
Run Code Online (Sandbox Code Playgroud)

数组本身就可以:

$ echo "${a1[1]} ${a2[1]}"
2 b
Run Code Online (Sandbox Code Playgroud)

编辑 - 基于ilkkachu答案的现实生活用例

SHIBB=(https://shibboleth.net/downloads/service-provider/3.0.2/ shibboleth-sp-3.0.2 .tar.gz)
XERCES=(http://apache.mirrors.nublue.co.uk//xerces/c/3/sources/ xerces-c-3.2.1 .tar.gz)
XMLSEC=(http://apache.mirror.anlx.net/santuario/c-library/ xml-security-c-2.0.1 .tar.gz)
XMLTOOL=(http://shibboleth.net/downloads/c++-opensaml/latest/ xmltooling-3.0.2 .tar.gz)
OPENSAML=(http://shibboleth.net/downloads/c++-opensaml/latest/ opensaml-3.0.0 .tar.gz)

typeset -n x …
Run Code Online (Sandbox Code Playgroud)

bash bash-expansion bash-array indirection

2
推荐指数
1
解决办法
77
查看次数

bash 数组中的间接访问

我正在尝试执行以下间接任务:

host_1=(192.168.0.100 user1 pass1)
host_2=(192.168.0.101 user2 pass2)

hostlist=( "host_1" "host_2" )

for item in ${hostlist[@]}; do

current_host_ip=${!item[0]}
current_host_user=${!item[1]}
current_host_pass=${!item[2]}

echo "IP: $current_host_ip User: $current_host_user Pass: $current_host_pass"

done
Run Code Online (Sandbox Code Playgroud)

我试图了解我应该如何执行这个间接请求,所以我从数组“hostlist”中拉取主机名,然后我应该做间接请求来拉取主机 1 IP、用户和通行证。但是当我尝试这样做时,我只能使用第一个变量(仅 IP)或其中的所有变量(如果我将 [@] 添加到变量名称的末尾)、空结果或来自大批。我无法理解如何首先将 host_1 数组复制到 current_ 变量中,然后(在我的脚本完成一些工作之后)我需要将 host_2 变量传递给相同的变量 current_。

你能指出我的错误吗?我认为这是我无法采用的问题的解决方案:

间接返回数组中的所有元素

linux shell bash array indirection

1
推荐指数
1
解决办法
124
查看次数