Sepertinya saya tidak bisa mendapatkan JSON kosong {}
untuk bergema jika envvar hilang. Saya juga memiliki mengekor }
dalam output jika diatur, atau menampilkan pelarian.
bash-3.2$ unset X
bash-3.2$ echo "${X:-{}}"
{}
bash-3.2$ X=y
bash-3.2$ echo "${X:-{}}"
y}
bash-3.2$ echo "${X:-{\}}"
y
bash-3.2$ unset X
bash-3.2$ echo "${X:-{\}}"
{\}
bash-3.2$ echo "${X:-'{}'}"
'{}'
bash-3.2$ X=z
bash-3.2$ echo "${X:-'{}'}"
z
Bagaimana cara saya menghindarinya dengan benar?
echo "${X:-{\}}"
bekerja dengan baik.Jawaban:
Kutip kawat gigi Anda:
Dalam dua kutipan yang diperlukan di sini, yang terlihat lucu tapi sintaksis baik-baik saja.
Kutipan tunggal tidak akan berfungsi, dan saya tidak sepenuhnya yakin mengapa tidak. Ini adalah kutipan bersarang nyata, bukan end-and-resume, yang dapat Anda verifikasi dengan memasukkan spasi. Double akan berfungsi dengan baik.
sumber
word
berikut ini:-
harus secara khusus dikutip ganda, sehingga"${X:-'{}'}"
secara harfiah${X:-'{}
diikuti oleh'}
. Mengapa spek ini sangat spesifik tidak jelas bagi saya.Anda dapat menipu dan mengatur variabel menjadi hasil kosong, dan menghindari masalah mengutip
sumber
Yang sering saya lakukan adalah memanfaatkan nilai hex untuk karakter melalui
printf
:Sedikit bertele-tele, tetapi bekerja tanpa terlalu banyak menekankan tentang kutipan.
sumber