通过实验,我发现以下语法可用于在 GNU bash 版本 5.0.11(1)-release (x86_64-pc-linux-gnu) 中将单引号转换为双引号...
text="aaa'bbb'ccc"; echo "${text//$"'"/$'"'}"
结果是...
aaa"bbb"ccc
请注意,单引号模式必须用双引号括起来,而双引号替换必须用单引号括起来。
有一个相关的商店记录为...
extquote
If set, $'string' and $"string" quoting is performed within
${parameter} expansions enclosed in double quotes. This option
is enabled by default.
正如评论中所讨论的,这似乎在 Bash 版本之间发生了变化。我认为这是
bash-4.3-alpha
(changelog)中的相关更改:shopt -s compat42
以及(在线手册)的描述:引用单引号的例子:
解决方法:将替换字符串放在变量中,并且不要在替换中使用引号:
有趣的是,如果扩展是unquoted,那么在所有版本中替换后引号都会被删除。那就是
s=abc; echo ${s/b/""}
打印ac
。这当然不会发生在其他扩展中,例如s='a""c' ; echo ${s%x}
输出a""c
。逆向工程的一般规则:
和一个结论:
'\''
通过参数扩展产生文字序列作为替换。"'\''"
作为替换。接下来是一些原始测试。
通过实验,我发现以下语法可用于在 GNU bash 版本 5.0.11(1)-release (x86_64-pc-linux-gnu) 中将单引号转换为双引号...
结果是...
有一个相关的商店记录为...