首页 > 解决方案 > zsh:将数组评估为命令

问题描述

能够使用数组构造来组合大型多行命令非常有用。例如:

declare -a command=(
   somecommand
       -flagA # comment
       -flagB # comment

   # No need for line continuation characters!
   foo/bar/baz.ext

   # Pipe into grep
   || grep fizz buzz # <=== This does not work!
)

然后它可以执行为${command[@]}. 但是,您不能嵌入控制流字符,如&&or||并正确执行它们。

有什么方法可以从 ZSH 数组中做到这一点?

标签: shellzsh

解决方案


您在示例中拥有的不是管道。这是一个命令列表。但是,您也不需要||或的隐式续行|

someCommandArgs=(
    -flagA  # comment
    -flagB  # comment

    foo/bar/baz.ext
)

someCommand "${someCommandArgs[@]}" |
  grep fizz buzz

命令不能以 结尾|,因此解析器知道该命令必须继续到另一行。

以上可以打包成一个函数:

myCommand () {
  local -a args=(
      -flagA  # comment
      -flagB  # comment

      foo/bar/baz.ext
  )
  someCommand "${args[@]}" | 
    grep fizz buzz
}

推荐阅读