Bash:循环变量相关的赋值和引用

时间:2017-08-28 20:12:40

标签: bash loops

我正在开发一个项目,需要根据某个文件中包含的数字来分配变量。我觉得包含和解释所有代码可能毫无意义,所以我把问题简化为一个简单的例子。

for ((i=1; i<=3; i++));
do
    align_$i=100_$i
done

在此示例代码中,我收到以下错误(在其他2中):

line 3: align_1=100_1: command not found

所以我知道我的方法替换正在起作用,但它不被认为是正确的赋值。我显然犯了一个简单的错误,但真的不知道如何解决这个问题。

一点点不同的想法:我有一个问题是调用变量的值,其中变量双重依赖于循环变量。 因此,使用上面示例中假设的正​​确输出,如果我在另一个循环中,我需要调用align_1的值,但需要这样做

for ((i=1; i<=3; i++));
    do something with $align_$i

我该如何正确地做到这一点?使用这些变量必须在另一个循环中,否则我不会有这个问题!

我为一个简单的问题道歉 - 巴什不是我的力量。

谢谢

1 个答案:

答案 0 :(得分:2)

最佳答案:不要

如果您使用数组(或带有非数字键的关联数组),通常可以避免对此的需求:

align=( )
for ((i=1; i<=3; i++)); do
    align[$i]="100_$i"
done

但如果你必须......

在bash 4.3 +

namevar允许在别名变量名下进行完全的双向访问(包括读写);别名目标可以是任何类型,包括数组本身:

for ((i=1; i<3; i++)); do
    declare -n align_var="align_$i"
    align_var="100_$i"
    unset -n align_var
done

旧版本

...如果你有bash 4.3或更高版本,请使用printf -v

for ((i=1; i<3; i++)); do
    printf -v "align_$i" %s "100_$i"
done