arrays - echo 数组的元素不输出任何内容

标签 arrays bash shell

这基本上是 this question 的延续。以下脚本提示用户输入搜索字符串,然后返回包含该字符串的 history 命令的编号列表。

#!/bin/bash

read -p 'Search history for? ' string

i=0
OLDIFS=$IFS
IFS=$'\n'

HISTFILE="$HOME/.bash_history"
history -r
arr=( "$(history | grep -i "$string" | cut -c8-)" )

for item in ${arr[@]}
do
    echo "$(( i++ )) $item"
done

我想通过要求用户选择列出的命令之一来扩展此功能

read -p 'select a command or type /q to quit ' n
if [[ $n = '/q' ]]; then
    exit
else
    for cmd in ${arr[$n]}
    do
        echo "$cmd"
    done
fi
IFS=$OLDIFS

但是每次都不会返回任何内容。我以前曾成功地使用过这种相同的选择方法。为什么这在这个特定场景中不起作用?

最佳答案

也许您想使用内置选择:

#!/bin/bash

read -p 'Search history for? ' string

i=0
OLDIFS=$IFS
IFS=$'\n'

HISTFILE="$HOME/.bash_history"
history -r
arr=$(history | grep -i "$string" | cut -c8-)

select choice in $arr; do echo "your choice is $choice"; break; done
IFS=$OLDIFS

输出:

...
33) kill -l                  
#? 33
your choice is kill -l

关于arrays - echo 数组的元素不输出任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941458/

相关文章:

java - 如何为以下场景声明一个二维数组?

C++,以下代码的计算顺序

c - 通过 bash 脚本将参数传递给 C 程序

linux - 用于删除目录中所有文件并打印已删除文件计数的 Shell 脚本

c - "cd"命令在我的自定义 shell 中不起作用

javascript - 根据 Angular JS 中对象数组中的数组长度进行排序

c - 如何以更好的方式编写这些字符数组?

python - stderr 的 python 默认编码?

bash - xargs 尊重搜索中的通配符

bash - 您将如何改进此Shell脚本以在执行每个任务之前检查错误?