我想构建变量名N_foo
和N_bar
,并在下面使用它们的值:
#!/bin/bash
N_foo=2
N_bar=3
for i in { "foo" "bar" }
do
for j in { 1..$(`N_$i`) }
do
echo $j
done
done
我想在两个内部循环中使用N_foo
和N_bar
的值,并分别打印出1,2和1,2,3。什么是正确的语法?
答案 0 :(得分:5)
#!/bin/bash
N_foo=2
N_bar=3
for i in "foo" "bar"
do
i2="N_$i"
seq 1 ${!i2}
done
答案 1 :(得分:5)
#!/bin/bash
N_foo=2
N_bar=3
for i in "foo" "bar"
do
key="N_${i}"
eval count='$'$key
for j in `seq 1 $count`
do
echo $j
done
done
答案 2 :(得分:3)
您可以使用间接变量引用运算符:
实施例
var="foo"
nfoo=1
ref=n${var}
echo $ref
echo ${!ref}
这给出了这个输出:
nfoo
1
答案 3 :(得分:0)
我最终使用以下代码。它使用参数替换技术(c.f。http://tldp.org/LDP/abs/html/parameter-substitution.html)。
#!/bin/bash
N_foo=2
N_bar=3
for i in "foo" "bar"
do
j_max=N_$i
for (( j=1; j<=${!j_max}; j++ ))
do
echo $j
done
done
!
是历史记录扩展参数(c.f。http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters)。 {1}}将替换为!j_max
的最新值,即第一次/第二次迭代中的j_max
/ N_foo
。然后调用N_bar
/ ${N_foo}
,在第一次/第二次迭代中值为2/3。