このページの内容

コメント

# を使って、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 に渡されたものです。