【发布时间】:2016-06-30 23:29:21
【问题描述】:
我有一个变量,我想使用Shell parameter expansion 将每次出现的反斜杠 ('\') 替换为双反斜杠 ('\\')。最初,我使用了以下构造:
$ var='\\a\b'
$ echo "${var//\\/\\\\}"
\\\\a\\b
这很好用,但它破坏了 vim 语法突出显示 - 显然,vim 无法处理 \\} 部分。因此,我决定将反斜杠存储在一个变量中并用来避免语法高亮问题:
$ bsl='\'
$ echo "${var//$bsl/$bsl$bsl}"
\\a\b
令我惊讶的是,它不起作用,尽管它适用于任何字母数字符号。那么,也许我需要在一个变量中存储 2 个反斜杠?让我们试试吧:
$ bsl='\\'
$ echo "${var//$bsl/$bsl$bsl}"
\\\\\\\\a\\\\b
现在,它从不工作变成了我需要的两倍工作时间。最终,我发现达到预期结果并保持 vim 突出显示的唯一方法如下:
$ bsl='\'
$ echo "${var//\\/$bsl$bsl}"
\\\\a\\b
虽然我已经找到了解决问题的方法,但我的问题是:为什么参数扩展使用反斜杠以这种方式工作?对我来说,这样的行为毫无意义。
【问题讨论】: