배쉬 버전: 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"]}