防止短路 Bash
Prevent short-circuiting in Bash
我想
- 生成匹配文件列表
- 知道是否至少有一个模式匹配
如果有任何 pdf 文件,以下将不起作用,因为第一个 compgen
将 return true
而第二个 compgen
将不会执行。
{ compgen -G "*.pdf" || compgen -G "*.txt"; }
有没有办法防止短路?
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 来解决这个问题。
我想
- 生成匹配文件列表
- 知道是否至少有一个模式匹配
如果有任何 pdf 文件,以下将不起作用,因为第一个 compgen
将 return true
而第二个 compgen
将不会执行。
{ compgen -G "*.pdf" || compgen -G "*.txt"; }
有没有办法防止短路?
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 来解决这个问题。