如何在bash脚本中获取用户输入的数字并回显该数字的存储数组值

时间:2018-10-13 23:11:54

标签: arrays linux bash

我编写了一个脚本,该脚本将正在运行的节点进程的输出与该进程的cwd一起抛出,并且使用for循环将值存储在数组中,并回显该数组。 我怎样才能让用户输入有关脚本抛出的输出的数组索引,并根据用户生成的输入显示输出 示例脚本

array=$(netstat -nlp | grep node)
for i in ${array[*]}
do 
echo $i
done

输出就是这样

1056
2064
3024

我想要更多的东西。我想接受类似用户的输入

Enter the regarding index from above list = 1

并假设用户输入1 然后下一个输出应该是

Your selected value is 2064

有可能在bash中

1 个答案:

答案 0 :(得分:0)

首先,您实际上并没有使用数组,而是将纯字符串存储在变量“ array”中。该字符串包含用空格分隔的单词,因此在for语句中提供变量时,未加引号的值受Word Splitting

的约束。

您需要使用数组语法来设置数组:

array=( $(netstat -nlp | grep node) )

但是,不带引号的命令替换仍然会使您接触Filename Expansion。将命令行存储到数组中的最佳方法是使用mapfile命令进行进程替换:

mapfile -t array < <(netstat -nlp | grep node)

for循环中,确保引用所有变量并使用索引@

for i in "${array[@]}"; do 
    echo "$i"
done

注意:

    mapfile创建的
  1. 数组将从索引0开始,因此请注意不要出现一次错误

  2. 我不知道如何在bash中实现变量,但这有点奇怪:

    • 如果引用没有索引的数组,则会得到第一个元素:

      array=( "hello" "world" )
      echo "$array"       # ==> hello
      
    • 如果使用数组语法和索引零引用普通变量,则将获得值:

      var=1234
      echo "${var[0]}"    # ==> 1234