【问题标题】:How to escape a character in a variable? [duplicate]如何转义变量中的字符? [复制]
【发布时间】:2021-09-16 11:42:48
【问题描述】:

我有一个将变量传递给 sed 命令的脚本,如下所示:

sed "s-\t-&${SUBDIRECTORY}/-"

但如果变量包含-(破折号),那么 sed 命令会抛出错误。

所以这个脚本:

VARIABLE="test-variable"
sed "s-\t-&${VARIABLE}/-" 

导致此错误:

sed: 1: "s-\t-&test-variable/-": bad flag in substitute command: 'v'

我无法找到这个问题的任何答案;没有- 也能正常工作。

我该如何解决这个问题?

【问题讨论】:

  • 如果您使用- 作为正则表达式分隔符,请转义它。

标签: shell sed


【解决方案1】:

使用 shell 参数扩展来转义- 的每个实例:

sed "s-\t-&${VARIABLE//-/\\-}/-"

在 Bash 手册中,Shell Parameter Expansion 下:

${<i>parameter</i>/<i>pattern</i>/<i>string</i>}

pattern 被扩展以产生一个模式,就像在文件名扩展中一样。 Parameter 被扩展并且模式与其值的最长匹配被替换为字符串。 [...] 如果 pattern/ 开头,则 pattern 的所有匹配项都将替换为 string。通常只替换第一场比赛。 [...]

【讨论】:

    【解决方案2】:

    在 shell 中正确转义是一个相当困难的问题,但您可以执行以下操作:

    $ variable="test-variable"
    $ printf '\t\n' | v="$variable" perl -pe 's-\t-$ENV{v}-'
    test-variable
    

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2023-02-09
      • 2021-09-19
      相关资源
      最近更新 更多