我正在开发一个项目,需要根据某个文件中包含的数字来分配变量。我觉得包含和解释所有代码可能毫无意义,所以我把问题简化为一个简单的例子。
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
我该如何正确地做到这一点?使用这些变量必须在另一个循环中,否则我不会有这个问题!
我为一个简单的问题道歉 - 巴什不是我的力量。谢谢
答案 0 :(得分:2)
如果您使用数组(或带有非数字键的关联数组),通常可以避免对此的需求:
align=( )
for ((i=1; i<=3; i++)); do
align[$i]="100_$i"
done
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