我编写了一个脚本,该脚本将正在运行的节点进程的输出与该进程的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中
答案 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
创建的数组将从索引0开始,因此请注意不要出现一次错误
我不知道如何在bash中实现变量,但这有点奇怪:
如果引用没有索引的数组,则会得到第一个元素:
array=( "hello" "world" )
echo "$array" # ==> hello
如果使用数组语法和索引零引用普通变量,则将获得值:
var=1234
echo "${var[0]}" # ==> 1234