繁体   English   中英

Bash,变量和数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM