如何在 bash 脚本变量中转义文件路径

how to escape file path in bash script variable

我想转义存储在 bash 脚本变量中的文件路径。 我读了几个关于转义回勾的线程,或者但它似乎没有正常工作:

我有这个变量: 变量值在 bash 脚本执行期间作为用户参数输入

CONFIG="/home/teams/blabla/blabla.yaml"

我需要将其更改为:\/home\/teams\/blabla\/blabla.yaml

我如何通过 sed 等在脚本中执行此操作(不是手动)?

echo "/home/teams/blabla/blabla.yaml" | sed 's/\//\\//g'
\/home\/teams\/blabla\/blabla.yaml

说明:

反斜杠用于将后面的letter/symbol设置为正则表达式,反之亦然。当您需要反斜杠作为字母时,使用双反斜杠。

使用 GNU bash 及其 Parameter Expansion:

echo "${CONFIG//\//\/}"

输出:

\/home\/teams\/blabla\/blabla.yaml

使用 this question 中的解决方案,您的情况将如下所示:

CONFIG=$(echo "/home/teams/blabla/blabla.yaml" | sed -e 's/[]\/$*.^[]/\&/g')

为什么 需要 转义?这是 XY Problem 吗?

如果问题是您正试图在替换正则表达式中使用该变量,那么给出的示例应该有效,但您可能会通过消除一些“倾斜牙签综合症”而受益,许多工具可以做到这一点通过使用不同的匹配定界符。 sed,例如:

$: sed "s,SOME_PLACEHOLDER_VALUE,$CONFIG," <<< SOME_PLACEHOLDER_VALUE
/home/teams/blabla/blabla.yaml

不过要非常小心。逗号在文件名中是完全有效的字符,几乎 任何 除了 NULL 字符。了解您的数据。