【问题标题】:how to escape file path in bash script variable如何在bash脚本变量中转义文件路径
【发布时间】:2021-12-01 23:13:41
【问题描述】:

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

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

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

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

我怎样才能在脚本中通过 sed 左右(而不是手动)做到这一点?

【问题讨论】:

  • 我不太确定问题是什么,但我相信你可以这样做:\/home\/teams\/blabla\/blabla.yaml,转义 / 符号

标签: string bash escaping backslash slash


【解决方案1】:

使用 GNU bash 及其 Parameter Expansion:

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

输出:

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

【讨论】:

    【解决方案2】:

    使用this question 的解决方案,在您的情况下,它看起来像这样:

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

    【讨论】:

      【解决方案3】:
      echo "/home/teams/blabla/blabla.yaml" | sed 's/\//\\\//g'
      \/home\/teams\/blabla\/blabla.yaml
      

      解释

      反斜杠用于将以下字母/符号设置为正则表达式,反之亦然。当您需要反斜杠作为字母时,使用双反斜杠。

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2013-03-23
          • 1970-01-01
          • 2021-11-13
          • 2021-05-31
          • 1970-01-01
          • 1970-01-01
          • 2021-02-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多