{}
如果缺少 envvar,我似乎无法得到一个空的 JSON来回显。}
如果设置,我要么在输出中有尾随,要么显示转义。
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
Run Code Online (Sandbox Code Playgroud)
我如何正确逃脱它?
Mic*_*mer 15
引用你的括号:
bash-3.2$ echo "${X:-"{}"}"
{}
bash-3.2$ X=y
bash-3.2$ echo "${X:-"{}"}"
y
bash-3.2$ unset X
bash-3.2$ echo "${X:-"{}"}"
{}
Run Code Online (Sandbox Code Playgroud)
这里需要内部双引号,这看起来很有趣但在语法上很好。
单引号不起作用,我不完全确定为什么不这样做。这是真正的嵌套引用,而不是结束和恢复,您可以通过放入空格来验证。但 Double 可以正常工作。
您可以作弊并将变量设置为空结果,并避免引用问题
$ def="{}"
$ echo ${X:-$def}
{}
$ X=y
$ echo ${X:-$def}
y
$ unset X
$ echo ${X:-$def}
{}
$
Run Code Online (Sandbox Code Playgroud)
我经常做的是通过以下方式使用字符的十六进制值printf
:
bash-4.3$ echo "${X:-$(printf '\x7B\x7D')}"
{}
bash-4.3$ X="something"
bash-4.3$ echo "${X:-$(printf '\x7B\x7D')}"
something
Run Code Online (Sandbox Code Playgroud)
有点冗长,但工作时不会过分强调引号。