【问题标题】:Shell script read multiple inputs from userShell 脚本从用户读取多个输入
【发布时间】:2019-05-15 17:45:49
【问题描述】:

如何一次从用户读取任意数量的输入并将其存储到数组中。 例如,这一次只会读取一个输入

  read -p "Please enter username: " username
  echo "Dear $username,"

我想要类似的东西:

read -p "Please enter location names separated by space: "

我如何将位置名称存储到一个数组中,然后循环遍历它。

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    试试这个:

    #!/bin/bash
    read -r -p "Please enter location names separated by space: " -a arr
    for location in "${arr[@]}"; do 
       echo "$location"
    done
    

    【讨论】:

    • script.sh: 2: 读取: 非法选项 -a script.sh: 3: script.sh: 错误替换
    • @JohnWick,代码是好的(ish)Bash 代码。 Bash 中的read 使用-a 选项已经很长时间了,所以我怀疑您正在使用另一个shell 运行代码,可能是Dash。如果您使用bash script.sh 运行代码,或者使程序可执行并使用./script.sh 运行它,它应该可以工作,除非您使用的是几十年前的 Bash 版本。你不能用 Dash 做你想做的事,因为它不支持数组。见Does dash support bash style arrays?
    【解决方案2】:
    read -p "Please enter location names separated by space: " location_names
    
    for location in $location_names
    do
    echo $location
    done
    

    测试。

    请输入以空格分隔的地点名称:paris london new-york
    巴黎
    伦敦
    纽约

    【讨论】:

    • 谢谢,它成功了。但是 location_names 是如何变成数组的呢?
    • for 用空格分隔符解析 location_names,从技术上讲 location_names 没有变成数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多