[英]Bash, variables and arrays
我浏览了很多木板,但没有找到解决我问题的最终解决方案。
我有一个名为“ array0”的数组,该名称存储到名为arrayname
的变量中。 另外,我有一个登录的IP地址,例如127.0.0.1,也存储在一个名为ip的变量中。
现在,我想像这样将IP分配给数组中的索引3:
"$arrayname"[3]="$ip"
因此,这没有用。 我尝试了很多方法来解决这个问题,但没有一个奏效。
有人可以告诉我这种情况的最终解决方案吗?
更新:解决该问题的机会很大! 但是我忘了提到我正在使用的数组只是从另一个文件(也是用bash编写)中获取的。 我现在的目标是在源文件本身中编辑数组。 还有其他想法吗?
尝试
read ${arrayname}[3] <<<"$ip"
您将需要使用declare
命令和间接参数扩展,但是将其与数组名称一起使用会有些棘手。 如果您将索引视为变量名的一部分 ,而不是像大多数语言一样,而不是将运算符应用于数组名,则它会有所帮助。
array0=(1 2 3 4 5)
arrayname=array0
name=$arrayname[3]
declare "$name=$ip"
echo "${!name}
还有另一种方法,这次使用通用的printf
。
printf -v "$arrayname[3]" %s "$ip"
演示
#!/bin/bash
array0=(a b c d e)
echo "${array0[@]}"
arrayname='array0'
ip='127.0.0.1'
printf -v "$arrayname[3]" %s "$ip"
echo "${array0[@]}"
输出
a b c d e
a b c 127.0.0.1 e
看到这个:
# declare -a arrayname=(element1 element2 element3)
# echo ${arrayname[0]}
element1
# arrayname[4]="Yellow"
# echo ${arrayname[4]}
Yellow
# export ip="192.168.190.23"
# arrayname[5]=$ip
# echo ${arrayname[5]}
192.168.190.23
您不必使用引号。
初始化数组后,您可以使用它们的索引访问数组元素,如下所示。 访问方式:
${arrayname[3]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.