我有一个数组,我正在循环该变量以运行其他命令。在进入下一个之前,我需要对数组值做的最后一件事是创建一个以数组值作为名称的变量,并分配一个包含其他变量的字符串。
目前我的代码如下所示:
for i in ${array[@]} do
some command
$i_value="my string including other variables ${other_variable}"
done
echo $i_value
当我运行这个时,我收到以下错误,我不知道为什么它寻找文件而不是使用数组值(它得到的)创建变量:
line 5: *value*_value=my string including other variables *other_variable*: no such file or directory.
答案1
如果您没有创建变量等的外部需求foo_value
,bar_value
而只需要在脚本中使用它们,那么您可能应该使用关联数组。就像这样:
declare -A values
for i in "${array[@]}"; do
# some commands...
values[$i]="my string including other variables ${other_variable}"
done
echo "${values[$i]}"
# loop over the keys:
for key in "${!values[@]}"; do
echo "values has key '$key'"
done
(请注意,您希望在周围加上引号"${array[@]}"
以正确处理包含空格和通配符的值;并且您需要在 之前有一个分号do
。for i in ...; do
)
答案2
只需使用export
内置...
示例(附带好处:使用动态变量名称来访问 ;-p)
~$ cat test.sh
#!/bin/bash
toto="coincoin"
tata="cuicui"
for var in toto tata; do
export coincoin_${!var}="${var}"
done
echo "${coincoin_cuicui}"
echo "${coincoin_coincoin}"
~$ ./test.sh
tata
toto