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

标签 arrays linux bash

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

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 中可以吗

最佳答案

首先,您实际上并没有使用数组,而是在变量“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

注释:

  1. 使用 mapfile 创建的数组将从索引 0 开始,因此请小心差一错误

  2. 我不知道变量在 bash 中是如何实现的,但是有一个奇怪的地方:

    • 如果您引用没有索引的数组,您将获得第一个元素:

      array=( "hello" "world" )
      echo "$array"       # ==> hello
      
    • 如果您引用具有数组语法且索引为零的普通变量,您将获得值:

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

关于arrays - 如何获取用户输入的数字并在 bash 脚本中回显该数字的存储数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52798125/

相关文章:

c - 更新的命令行参数

python - 如何在python中随机采样矩阵?

linux - 如何找到具有给定名称的多行文件?

c++ - 运行 shell 脚本时出错 : "pipe call failed"

linux - 如何使用文本文件获取命令行参数?

C- 声明 char 数组

python - 如何运行一个新的线程进程?

bash - 计算 bash 中的特定单词

linux - 在squid-std.conf 文件中打开端口的脚本

javascript - 将多个元素添加到所有相等的数组中