Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在shell脚本中使用用户输入填充动态数组_Arrays_Shell_User Input_Dynamic Arrays - Fatal编程技术网

Arrays 在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覆盖(这意味着,所有人名都存储在单个变量中,而

我不熟悉shell脚本。我试图创建一个大小为
n
的数组,其中
n
由用户在运行时输入

while [ $i -lt $n ]
do

    echo For person $i enter the name?
    read io
    eval Name[$index]= $io

done
当我尝试这样做时,每次循环从用户获得输入时,值都会被覆盖

例如:如果一个人是汤姆,如果二个人是约翰。然后,当我试图在脚本末尾打印所有人名时,人名1将被人名n覆盖(这意味着,所有人名都存储在单个变量中,而不是数组中)

谁能告诉我哪里出了问题

  • 您需要在循环中增加
    i
    ,以便它最终退出。此行将
    i
    增加1:

    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]”。这个例子有什么语法吗?