提问人:Pierre ALBARÈDE 提问时间:4/23/2021 更新时间:4/25/2021 访问量:26
shell 中的非对称引用语法
Asymmetric quoting syntax in shells
问:
我注意到 Unix shell 和其他语言(如 LaTeX、HTML)中有一种趋势,即消除对称封闭语法。
通过对称封闭语法,我的意思是开始和结束符号是相同的,例如,shell 单引号 ', double quote “ 和 backtick ', LaTeX $。
建议用非对称封闭语法代替对称封闭语法,例如,在 shell 中写入 $(ls) 而不是 'ls',在 LaTeX 中写入 \(2+2\) 而不是 $2+2$。
这种变化的原因是人类读者或计算机程序(解析器)易于解释以及嵌套问题。
嵌套引号的解决方法通常是在一个级别使用双引号,在另一个级别使用单引号,但这不适用于三个级别,例如,并且单引号和双引号在参数替换方面也不同,因此您不能在两个级别上使用参数替换。echo "'"a"'"
有没有办法用允许嵌套的非对称结构替换 Unix shell 单引号和双引号?
我发现 $'' 作为单引号的不对称替代品,但双引号呢?
($“” 在 zsh 中不起作用。
答:
1赞
KamilCuk
4/25/2021
#1
有没有办法用允许嵌套的非对称结构替换 Unix shell 单引号和双引号?
是的,编写你自己的 shell 实现来支持你想要的东西。现有的 shell 不支持这样的事情。选择一个明确的字符序列来表示引号,这样它就不会干扰其他 shell,并希望在与其他 shell 实现一起运行时导致语法错误。
我发现$''作为不对称的替代品
$''
是 ANSI C 带引号的字符串,用于区域设置转换。这些都不是报价的替代品。$""
评论
0赞
Pierre ALBARÈDE
4/25/2021
法国海鸥 «» 会很棒,但它们不是 ASCII 集。
评论
Is there a way...
你想要一个这样的答案:编写你自己的 shell 来做到这一点? 不,不是为了那个,而是为了翻译消息。$"" does not work for this in zsh
$""