n=1
test=1000
test1=aaa
我正在尝试:
echo $test$n
获取
aaa
但是我得到了
10001
我试图以这种方式使用它因为我有变量:lignePortTCP1,lignePortTCP2,lignePortTCP1,ETC在for循环中如下:
declare -i cpt3
cpt3=0
for ((i = 1; i <= cpt; i++)); do
cpt3=cpt3+1
echo "Port/Protocole : $lignePortTCP$cpt3 - Nom du Service : $ligneServiceTCP$cpt3"
done
答案 0 :(得分:3)
给定分配的变量
n=1
test1=aaa
...并且您希望在aaa
和test
的值下打印n
,然后将要扩展的名称放在其自己的变量中,并使用!
运算符,如下所示:
varname="test$n"
echo "${!varname}"
BashFAQ #6中明确讨论了这一点。
也就是说,变量间接不是一个特别好的做法 - 通常,你可以更好地使用数组,无论是关联的还是其他的。
例如:
test=( aaa bbb ccc )
n=0
echo "${test[n]}"
...对于不是从0开始的值:
test=( [1]=aaa [2]=bbb [3]=ccc )
n=1
echo "${test[n]}"
答案 1 :(得分:0)
如果要减去test和n的值,请将计算包装在$((...))中并使用 - 运营商:
$((test-n))
答案 2 :(得分:0)
你也可以使用eval,虽然它可能并不比Charles Duffy提供的技术更好。
$ n=1
$ test=1000
$ test1=aaa
$ eval echo \${test$n}
aaa
答案 3 :(得分:0)
一种方法是使用${!}
,但您必须将组合名称存储在自己的变量中才能使用:
var=test$n
echo "${!var}"
如果你可以控制首先如何分配变量,那么使用数组会更好。您可以将值分配给lignePortTCP1
,lignePortTCP2
等,而不是lignePortTCP[0]
,lignePortTCP[1]
等,然后使用${lignePort[$n]}
检索它们。