防止短路 Bash

Prevent short-circuiting in Bash

我想

  1. 生成匹配文件列表
  2. 知道是否至少有一个模式匹配

如果有任何 pdf 文件,以下将不起作用,因为第一个 compgen 将 return true 而第二个 compgen 将不会执行。

{ compgen -G "*.pdf" || compgen -G "*.txt"; }

有没有办法防止短路?

使用 extended glob pattern.

shopt -s extglob
compgen -G '*.@(pdf|txt)'

Using ; would just return the result of the last compgen. I still need the logical or of all the compgens to know if there was any match.

您可以自己编写逻辑来处理退出状态。一个简短的版本可能如下所示:

{ cmd1; ret=$?; cmd2; ! ((ret | $?)); }

怎么样

files=( *.pdf *.txt )
compgen -W "${files[*]}"

这会破坏包含空格的文件,但可以使用 IFS 来解决这个问题。