【问题标题】:Execute multiple commands after [ test[ 测试后执行多个命令
【发布时间】:2013-10-28 00:19:22
【问题描述】:

如果测试为真,如何使用简单的一行测试并执行多个命令? 以下方法不起作用:

for f in $source_dir/*.mov
do
   [ ! -f "$f" ] && echo "No files in source directory. Exiting."; break || continue
   # a bunch of commands
done

我使用下面的代码让它工作,但我觉得应该有更简单的方法。

for f in $source_dir/*.mov
do
   if [ ! -f "$f" ]; then
      echo "No files in source directory.  Exiting."
      break
   else
      # a bunch of commands
   fi
done

【问题讨论】:

  • ...这就是if[ 的设计目的,您为什么认为“应该有更简单的方法”?
  • FWIW,你可以链接&&:[ ! -f "$f" ] && echo ... && break。但是,如果你输入||,请注意,与类似c 的语言不同,它与&& 具有相同的优先级——a || b && c 等效于{a || b} && c,而不是您可能期望的a || {b && c}。跨度>

标签: bash if-statement for-loop


【解决方案1】:

使用{:

[[ ! -f "$f" ]] && { this; that; break; } || { the_other; ...; }

这是否“更简单”是美学问题。

使用[[ 代替[ 是可选的。但通常会更好。

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 2017-03-28
    • 2016-03-19
    • 2011-03-18
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多