【发布时间】:2019-11-27 18:32:39
【问题描述】:
让我们假设我正在运行这样的东西:
jq -nr --arg target /tmp \
'(["echo","Hello, world"]|@sh)+">\($target)/sample.txt"' \
| sh
一切都很好,除非我忘记传递变量$target:
$ jq -nr '(["echo","Hello, world"]|@sh)+">\($target)/sample.txt"'
jq: error: $target is not defined at <top-level>, line 1:
(["echo","Hello, world"]|@sh)+">\($target)/sample.txt"
jq: 1 compile error
我怎样才能捕捉到这一点并使用默认值?
我试过了:
$target?($target)?try $target catch null$target? // null
但这似乎是解析时错误,显然无法在运行时捕获。我错过了任何动态语法吗?
我发现在$ARGS.name中可以找到命令行参数,但是有两个缺点:
- 这是在 1.6 版中引入的,但我在 CentOS 7 上有 1.5。
- 它不捕获本地定义的变量。
【问题讨论】:
-
如果没有 $ARGS.name 似乎是不可能的,因为引用未定义的变量是一个编译错误;即它在执行任何代码之前暂停程序
-
确实,引入 $ARGS 是为了解决(或至少提供一种解决方法)您发现的问题。但是,
jq -n '$x'应该返回一个非零错误代码(但它因版本而异)。 -
至少这会暗示其他人唯一的解决方案就是升级。
标签: jq