二重引用符を表示する方法

二重引用符を表示する方法

バッシュバージョン: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"]}

関連情報