bash 为字符串中的每个斜杠插入反斜杠

fab*_*s05 0 bash sed string escape-characters

我有一个作为路径的字符串:

/tmp/something
Run Code Online (Sandbox Code Playgroud)

我需要用反斜杠转义正斜杠:

\/tmp\/something
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?或许sed

请指出我正确的方向。

fra*_*ous 5

你可以使用 Bash 自己的变量操作方法(参数扩展)来做到这一点,尽管语法相当可怕:

$ string='/tmp/something'
$ escapedstring="${string//\//\\\/}"
$ printf '%s\n' "$escapedstring"     
\/tmp\/something
Run Code Online (Sandbox Code Playgroud)

为了进一步解释这一点,在 bash 中${var//xxx/yyy}意味着“获取变量var并将所有出现的 替换xxxyyy”。在这种情况下,需要在指定替换端和替换时对斜杠进行转义;前者用于\/单个正斜杠,后者用于\\\/反斜杠加正斜杠,因此您最终会得到可笑的外观${string//\//\\\/}​​。

请记住不要使用echo它来显示其内容,因为根据实现或环境,echo可能会自行处理反斜杠字符。