我有一个包含
的数组commName[0]="ls"
commName[1]="date"
commName[2]="crontab"
commName[3]="uname"
commName[4]="hostname"
现在数组并不总是包含这些。有时候它可能会有更多的指数。值并不总是ls,date,...
它们可以是不同的。最重要的是,我在编码时不知道数组的大小和值。
每个数组值ls,date,...
都有自己唯一的地址。例如,ls
将/home/test/
,日期将具有/home/test/test2/
等等......这些地址需要存储到稍后将在代码中使用的变量中。所以我应该根据给定的数组
$lsAddress
$dateAddress
$crontabAddress
$unameAddress
$hostnameAddress
因此,我需要一种方法来制作这些变量(请记住我不知道ls,date,uname,....
)
我的方法就是这个
for ((j=0 ; j<${#commName[@]} ; j++))
do
set commName[$j]Nick="hi"
echo $(${commName[$j]}Nick)
done
我期望这样做是为数组的每个索引创建新变量,并将它们设置为hi
(仅用于测试目的),然后访问这些新变量。
此外,新创建的变量必须可以在任何地方访问。所以,我不能有一个不断被替换的临时变量。
但是,这种方法不起作用......还有其他方法吗?
答案 0 :(得分:1)
使用eval
。试试这个:
for ((j=0 ; j<${#commName[@]} ; j++))
do
param=`echo ${commName[$j]}Nick`
eval "$param=hi1"
eval "echo \$$param"
done
答案 1 :(得分:1)
使用两个并行数组,以便命令数组中的条目与地址数组中的相应条目匹配。
commName[0]="ls"
commName[1]="date"
commName[2]="crontab"
commName[3]="uname"
commName[4]="hostname"
commAddress[0]="/home/test/" # ls
commAddress[1]="/home/test/test2" # date
# etc
然后,当您具有i
的特定值时,您知道${commName[i]}
和${commAddress[i]}
会在一起。
我推荐这两个数组,但您也可以考虑使用bash
的间接参数扩展。
$ commName[0]="ls"
$ lsAddress="/home/test"
$ name="${commName[0]}Address"
$ echo "${!name}"
/home/test