防止 Bash 短路
Posted
技术标签:
【中文标题】防止 Bash 短路【英文标题】:Prevent short-circuiting in Bash 【发布时间】:2021-08-15 11:46:28 【问题描述】:我想要
-
生成匹配文件列表
知道是否至少有一种模式匹配
如果有任何 pdf 文件,以下将不起作用,因为第一个 compgen
将返回 true
而第二个 compgen
将不会被执行。
compgen -G "*.pdf" || compgen -G "*.txt";
有没有办法防止短路?
【问题讨论】:
所以不要使用||
?
@KamilCuk 使用;
只会返回最后一个compgen 的结果。我仍然需要所有 compgens 的逻辑或来知道是否有任何匹配。
【参考方案1】:
使用 ;只会返回最后一个 compgen 的结果。我仍然需要所有 compgens 的逻辑或来知道是否有任何匹配。
您可以自己编写逻辑来处理退出状态。一个简短的版本可能如下所示:
cmd1; ret=$?; cmd2; ! ((ret | $?));
【讨论】:
【参考方案2】:使用extended glob pattern。
shopt -s extglob
compgen -G '*.@(pdf|txt)'
【讨论】:
【参考方案3】:怎么样
files=( *.pdf *.txt )
compgen -W "$files[*]"
这会破坏包含空格的文件,但可以使用 IFS 来解决这个问题。
【讨论】:
以上是关于防止 Bash 短路的主要内容,如果未能解决你的问题,请参考以下文章