我想从终端搜索目录中的文本文件列表。为了不让自己想太多,我希望能够搜索几个单词,例如,search one two three
如果有一个文件的名称中包含多个这些单词之一,则返回它。这是我的 if 语句:
snip-list() {
for filename in ~/notes/*; do
file=`basename "$filename"`
fs=${file%.*}
if [[ $fs =~ $1 ]] && [[ $fs =~ $2 ]] && [[ $fs =~ $3 ]] && [[ $fs =~ $4 ]] && [[ $fs =~ $5 ]]; then
echo $fs
# exit
elif [[ $fs =~ $1 ]] && [[ $fs =~ $2 ]] && [[ $fs =~ $3 ]] && [[ $fs =~ $4 ]]; then
echo $fs
# exit
elif [[ $fs =~ $1 ]] && [[ $fs =~ $2 ]] && [[ $fs =~ $3 ]]; then
echo $fs
# exit
elif [[ $fs =~ $1 ]] && [[ $fs =~ $2 ]]; then
echo $fs
# exit
elif [[ $fs =~ $1 ]]; then
echo $fs
fi
done
}
我将向此目录添加文件,因此如果我按原样运行该语句,我将得到太多返回结果,以至于它毫无用处(至少我必须滚动到顶部才能看到第一个结果)。
如果有一种方法可以做到“如果用户搜索了 5 个术语并且他们返回了一些内容,不要运行其他 4 个条件
我尝试过exit
在每个语句之后运行,这就是我想要的东西我需要终端窗口保持打开状态。
答案1
使用return
而不是exit
从 shell 函数返回。
如果您使用的是 shellbash
或其他具有内置帮助的 shell,请键入help return
以获取详细信息。否则,请参阅 shell 的手册页。