我编写了一个脚本,该脚本使用该进程的 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
注释:
使用
mapfile
创建的数组将从索引 0 开始,因此请小心差一错误我不知道变量在 bash 中是如何实现的,但是有一个奇怪的地方:
如果您引用没有索引的数组,您将获得第一个元素:
array=( "hello" "world" ) echo "$array" # ==> hello
如果您引用具有数组语法且索引为零的普通变量,您将获得值:
var=1234 echo "${var[0]}" # ==> 1234
关于arrays - 如何获取用户输入的数字并在 bash 脚本中回显该数字的存储数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52798125/