如何在 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 字符。了解您的数据。
我想转义存储在 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 字符。了解您的数据。