[jq] --rawfile でテキストファイルを文字列として読み込む

作成日: 2026年10月24日

jq の --rawfile オプションを使用すると、外部のテキストファイル全体を文字列として変数に読み込むことができます。複数行のテキストを JSON のプロパティに設定したい場合などに利用できます。

下記の例では、改行とダブルクォートを含む message.txt を作成し、その内容を JSON の message プロパティに設定しています。

printf '%s\n' 'Hello "jq"' 'Second line' > message.txt
jq -n --rawfile file_text message.txt '{message: $file_text}'

実行結果は下記のとおりです。

{
  "message": "Hello \"jq\"\nSecond line\n"
}

--rawfile file_text message.txt は、message.txt の内容を jq の変数 $file_text に文字列として格納します。{message: $file_text} で、その値を message プロパティに設定しています。この例では標準入力から JSON を読み込む必要がないため、-n を指定しています。

ファイル内の改行やダブルクォートは、出力時に JSON の文字列としてエスケープされます。末尾の改行も保持されます。

--slurpfile がファイル内の JSON をパースして配列として読み込むのに対し、--rawfile はファイルの内容を文字列として読み込むため、ファイルが JSON 形式である必要はありません。

参考

jq