bash - 是否可以创建以变量作为标题并具有包含其他变量的字符串值的变量?

bash - 是否可以创建以变量作为标题并具有包含其他变量的字符串值的变量?

我有一个数组,我正在循环该变量以运行其他命令。在进入下一个之前,我需要对数组值做的最后一件事是创建一个以数组值作为名称的变量,并分配一个包含其他变量的字符串。

目前我的代码如下所示:

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_valuebar_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[@]}"以正确处理包含空格和通配符的值;并且您需要在 之前有一个分号dofor 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

相关内容