cat
Bash 3.2でJSONを含む区切り文書を出力しようとすると、この動作により混乱しました。
入力する:
$ cat <(cat <<EOF
> {"x":[{"a":1,"b":2}]}
> EOF)
出力:
{"x":["a":1]}
{"x":["b":2]}
どうなりますか?
答え1
これは単にbashのシェル変数拡張です。この場合、中かっこの間のすべての項目が繰り返され、式に展開されます。
$ echo var{1,2,3,4}
var1 var2 var3 var4
$ echo var{1..10}
var1 var2 var3 var4 var5 var6 var7 var8 var9 var10
答え2
答えではありませんが、フォーマットされた説明です。
$ cat <(cat <<EOF
> {"x":[{"a":1,"b":2}]}
> EOF)
bash: warning: here-document at line 15 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 15 delimited by end-of-file (wanted `EOF')
{"x":[{"a":1,"b":2}]}
新しい行に右括弧を入れます
$ cat <(cat <<EOF
> {"x":[{"a":1,"b":2}]}
> EOF
> )
{"x":[{"a":1,"b":2}]}
明らかに再現できません。
$ echo $BASH_VERSION
4.3.39(1)-release
答え3
Brace拡張には「braceexpand」オプションが適用されます。たとえば、
set +B
cat <(cat <<EOF
{"x":[{"a":1,"b":2}]}
EOF
)
単一のJSON値を生成します。