バッシュバージョン:bash-5.0.7
二重引用符が消えました。
[root@cander ~]# cat test.sh
#!/bin/bash
cat > test.conf << EOF
AA=${one:-["one","two"]}
EOF
[root@cander ~]# sh test.sh
[root@cander ~]# cat test.conf
AA=[one,two]
\を使用しても効果はありません。
[root@cander ~]# cat test.sh
#!/bin/bash
cat > test.conf << EOF
AA=${one:-[\"one\",\"two\"]}
EOF
[root@cander ~]# sh test.sh
[root@cander ~]# cat test.conf
AA=[\"one\",\"two\"]
何を期待するか
AA=["one","two"]
答え1
拡張プログラム内部の参照処理が奇妙です。
これはあなたが望むものです...
$ echo "${one:-["\"one\"","\"two\""]}"
["one","two"]
しかし、ここの記事は何か違います...
$ cat <<EOF
> ${one:-["\"one\"","\"two\""]}
> EOF
[\"one\",\"two\"]
デフォルト値を変数に入れるのが最も簡単な方法です。
$ def_one='["one","two"]'
$ cat <<EOF
> ${one:-$def_one}
> EOF
["one","two"]
答え2
次の構文を試すことができます。
admin@srv-web:~$ cat test.sh
#!/bin/bash
cat > test.conf << 'EOF'
AA=${one:-["one","two"]}
EOF
結果:
administrateur@srv-web:~$ ./test.sh ; cat test.conf
AA=${one:-["one","two"]}