如果第一个 elif 为真,如何不继续执行下一个 elif?

如果第一个 elif 为真,如何不继续执行下一个 elif?

我想从终端搜索目录中的文本文件列表。为了不让自己想太多,我希望能够搜索几个单词,例如,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 的手册页。

相关内容