shell - 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 数组中做到这一点?
解决方案
您在示例中拥有的不是管道。这是一个命令列表。但是,您也不需要||
或的隐式续行|
。
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
}
推荐阅读
- java - 如何编写一个函数来从二维数组中读取元素?
- sql - 带有多个条目条件的 Select 语句
- sockets - 当 recv 缓冲区已满时,TCP 会暂停发送吗?
- c# - 如何防止在 ASP.Net Core 中注册后自动登录?
- datetime - Y=0、M=0、D=0 的日期解析为 11 月 30 日 [今天]
- sql-server - 永久删除 MS SQL Server 中的有效权限
- laravel - Laravel - 如何使用 API 实现模型功能
- list - Terraform 不起作用输入和环境变量
- python-3.x - Python - >提醒没有弹出
- python-3.x - 为什么我不能使用 personalDetails() 变量进行打印