コメント
# を使って、jqフィルターにコメントを書けます。
文字列の一部でない # 文字は、コメントの開始を示します。# から行末までのすべての文字は無視されます。
行末の直前に、奇数個のバックスラッシュ文字がある場合、次の行もコメントの一部とみなされ、無視されます。
たとえば、次のコードは [1,3,4,7] を出力します。
[
1,
# foo \
2,
# bar \\
3,
4, # baz \\\
5, \
6,
7
# comment \
comment \
comment
]
コメントを次の行へ継続するバックスラッシュは、jqスクリプトの「shebang」を書くときに便利です。
#!/bin/sh --
# total - Output the sum of the given arguments (or stdin)
# usage: total [numbers...]
# \
exec jq --args -MRnf -- "$0" "$@"
$ARGS.positional |
reduce (
if . == []
then inputs
else .[]
end |
. as $dot |
try tonumber catch false |
if not or isnan then
@json "total: Invalid number \($dot).\n" | halt_error(1)
end
) as $n (0; . + $n)
exec の行は、jqではコメントとみなされるため、無視されます。しかし、sh では無視されません。sh では、行末のバックスラッシュがコメントを継続しないためです。この方法で、スクリプトを total 1 2 として呼び出すと、/bin/sh -- /path/to/total 1 2 が実行され、sh は、次に exec jq --args -MRnf -- /path/to/total 1 2 を実行します。その際、自分自身を jq インタープリターに置き換えます。このインタープリターは、指定したオプション(-M、-R、-n、--args)で起動し、現在のファイル($0)を、$@ の引数を使って評価します。これらの引数は、sh に渡されたものです。