在shell脚本中使用用户输入填充动态数组

时间:2016-06-27 18:43:12

标签: 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个名称覆盖(这意味着,所有名称都存储在单个变量而不是数组中)。

有人能告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

  • 您需要在循环中增加public function bind($param, $value, $type = null) { if (is_null ( $type )) { switch (true) { case is_int ( $value ) : $type = PDO::PARAM_INT; break; case is_bool ( $value ) : $type = PDO::PARAM_BOOL; break; case is_null ( $value ) : $type = PDO::PARAM_NULL; break; default : $type = PDO::PARAM_STR; } } $this->stmt->bindValue ( $param, $value, $type ); } public function query($query) { $this->stmt = $this->dbh->prepare($query); } public function execute(){ return $this->stmt->execute(); } ,以便最终退出。此行将i递增1:

    i
  • 您无需在let i+=1 中使用eval

  • 没有名为eval Name[$index]= $io的变量(至少在您的代码示例中没有)。我假设您打算在那里使用index。 (即i应为Name[$index]

此代码有效:

Name[$i]