【发布时间】:2017-01-06 09:41:27
【问题描述】:
我有一个 glob 模式 PATTERN 并且想在 Zsh 中实现以下逻辑:
if a file matching *PATTERN* exists, then
do this-and-that
end
请注意,我不需要知道哪些文件实际上与模式匹配;只有存在一些文件(或目录)的事实是相关的。
我找不到使用if 语句的聪明方法,所以我使用最多执行一次的“循环”来实现它:
for f in *PATTERN*(N)
do
this-and-that
break
done
这有效:如果没有条目与 PATTERN 匹配,则 (N) 会导致错误消息被抑制并跳过循环;否则,循环体执行一次。
问题:有没有一种方法可以让我只用if 实现我的目标,没有循环?
【问题讨论】:
-
我在尝试使用它时遇到错误,但理论上
*PATTERN*(NY1)应该只返回一个匹配项,如果有的话。 -
太棒了!!!!为我工作!你得到什么错误?顺便说一句,如果您将评论作为答案,我会接受它作为最佳答案。虽然其他答案也显示了很棒的想法,但它们不如您的优雅。
-
好的,看起来我对我测试它的版本感到困惑。它在 5.0.5 中不起作用(“未知文件属性:Y”,尽管手册页记录了它),但它确实在 5.2 中工作。
-
我有 5.1.1。我猜这个功能是在 5.1 中引入的。