Bash 如何在执行字符串插值时转义结束括号
我想Bash 如何在执行字符串插值时转义结束括号,bash,Bash,我想回显变量的值或默认值(如果变量为空或未设置) 我试过: echo "${X:-{}}" 结果: 值} 如果X的值已设置或 {} 如果没有设置 设置变量后,输出中会出现一个右括号,这是一种不希望出现的行为。我怎样才能避开结束括号?(我尝试用“\”转义,但没有成功…这样做可以: echo "${X:-"{}"}" 解析器认为第一个}正在关闭${},因此打印变量,然后打印第二个}。您需要退出第一个结束括号: echo "${z:-{\}}" 其他答案适用于bash(至少适用于正确版本)、zs
回显变量的值或默认值(如果变量为空或未设置)
我试过:
echo "${X:-{}}"
结果:
值}
如果X的值已设置或
{}
如果没有设置
设置变量后,输出中会出现一个右括号,这是一种不希望出现的行为。我怎样才能避开结束括号?(我尝试用“\”转义,但没有成功…这样做可以:
echo "${X:-"{}"}"
解析器认为第一个}
正在关闭${}
,因此打印变量,然后打印第二个}
。您需要退出第一个结束括号:
echo "${z:-{\}}"
其他答案适用于bash
(至少适用于正确版本)、zsh
和ksh
,但至少在sh
的某些版本中不起作用
使用变量进行替换应该适用于任何地方,我希望:
def={}
echo "${X:-$def}"
为替换文本使用变量以避免混淆解析器<代码>定义={};echo“${X:-$def}”
我想知道是否有一种更优雅的方法……我现在看不出来。解析器变得“混乱”并提前结束。转义可能是一种选择,但我认为,\}
不支持转义,因为这里需要转义。如果你能处理一个默认值{}
,你可以使用echo“${X:-'{}}”
@Etan使用一个变量作为替换文本似乎对我最有效,谢谢。这导致在bash 3上对未设置的变量使用{\}
,但对bash 4似乎有效。返回{\}
和GNU bash,4.1.2版
适用于我的bash4.3.33(1)-发行版
,在ideone.com上适用于4.3.30(1)-发行版
。bash4.1.2(1)-但在CentOS 6上发布时失败。同样适用于CentOS 7上的bash4.2.45(1)-release
。我必须添加一个额外的“.在设置了X的情况下仍然不起作用…@Heschoon你确定你在Bash中吗?该行为(需要更多输入)显示在sh中。如果是Bash,那么是哪个版本?好的,我在Boot2Docker中执行命令,它不使用Bash,这是我问题的根源。