防止Bash中的短路
我想要
- 生成匹配文件列表
- 知道是否至少有一种模式匹配
如果有任何 pdf 文件,以下将不起作用,因为第一个compgen将返回true而第二个compgen将不会执行。
{ compgen -G "*.pdf" || compgen -G "*.txt"; }
有没有办法防止短路?
回答
使用扩展的 glob 模式。
shopt -s extglob
compgen -G '*.@(pdf|txt)'
回答
使用 ; 只会返回最后一次 compgen 的结果。我仍然需要所有 compgens 的逻辑或逻辑来知道是否有任何匹配。
您可以编写逻辑来自己处理退出状态。简短版本可能如下所示:
{ cmd1; ret=$?; cmd2; ! ((ret | $?)); }