Arrays 在shell脚本中使用用户输入填充动态数组
我不熟悉shell脚本。我试图创建一个大小为Arrays 在shell脚本中使用用户输入填充动态数组,arrays,shell,user-input,dynamic-arrays,Arrays,Shell,User Input,Dynamic Arrays,我不熟悉shell脚本。我试图创建一个大小为n的数组,其中n由用户在运行时输入 while [ $i -lt $n ] do echo For person $i enter the name? read io eval Name[$index]= $io done 当我尝试这样做时,每次循环从用户获得输入时,值都会被覆盖 例如:如果一个人是汤姆,如果二个人是约翰。然后,当我试图在脚本末尾打印所有人名时,人名1将被人名n覆盖(这意味着,所有人名都存储在单个变量中,而
n
的数组,其中n
由用户在运行时输入
while [ $i -lt $n ]
do
echo For person $i enter the name?
read io
eval Name[$index]= $io
done
当我尝试这样做时,每次循环从用户获得输入时,值都会被覆盖
例如:如果一个人是汤姆,如果二个人是约翰。然后,当我试图在脚本末尾打印所有人名时,人名1将被人名n覆盖(这意味着,所有人名都存储在单个变量中,而不是数组中)
谁能告诉我哪里出了问题 - 您需要在循环中增加
,以便它最终退出。此行将i
增加1:i
let i+=1
- 您不需要在
中使用eval Name[$index]=$io
eval
- 没有名为
的变量(至少代码示例中没有)。我想你是想在那里使用index
。(即,I
应为Name[$index]
)Name[$i]
#!/bin/sh -e
Name=()
i=0
while [ $i -lt 4 ]
do
echo For person $i enter the name?
read io
Name[$i]=${io}
let i+=1
done
echo names:
for n in "${Name[@]}"
do
echo $n
done
您可以去掉
$index
和eval
。只需将eval Name[$index]=$io
替换为Name=(“${Name[@]}”“$io”)
。谢谢@tony19。这对我很有效。我试图在同一个循环中打印多个数组值,例如:person:1-打印姓名、年龄、出生日期等。因此,我采用了声明3个数组的相同技术。当我尝试执行“echo person 1{$Name[$i]}”时,我无法访问变量名的相应值。而是打印“名称[0]”。这个例子有什么语法吗?