我正在尝试编写一个函数来输入不同人员的信息,例如五名学生。我打算使用for循环,而不声明数组。
function student() {
for (( i = 0; i < 5; i++ )); do
echo "Name"
read name$i
done
}
我相信,在每次迭代中,它将是一个不同的变量name$i
,输入将被读取。现在,当我尝试使用for循环显示相同的数据时
function student() {
for (( i=0;i < 5; i++)); do
echo $(name$i)
done
}
它显示错误name0: command not found
现在,当我像echo "$name0"
echo "$name1"
那样显式显示值时,一切都很好,这告诉我变量都已声明,输入已填充。问题是,在尝试显示值时,我可能无法正确访问变量名,因为当我写入echo "$name$i"
时,输出为name0
。这意味着它需要";name";作为字符串和i的值。我已经尝试将字符串";name";值为"0";i〃;使用了几种方法。有一种方法可以像namen="${i}name"
一样绑定两者,但我希望字符串后面有整数值,所以它对我不起作用。我是shell脚本的新手,所以你所有有价值的建议都会很有帮助。
设置:
$ name0=0; name1=1; name2=2; name3=x; name4=y
在bash dynamic variables
上运行网络搜索应该提供大量选项,其中包括:
间接参考
student() {
for ((i=0; i<5; i++))
do
x="name${i}"
echo "${!x}"
done
}
名称参考
student() {
for ((i=0; i<5; i++))
do
declare -n x="name${i}"
echo "${x}"
done
}
这两者都会生成:
$ student
0
1
2
x
y