【问题标题】:Escaping a special character within a command in shell script在 shell 脚本的命令中转义特殊字符
【发布时间】:2016-04-11 10:46:04
【问题描述】:

我对 shell 脚本并不陌生。我在 shell 脚本中有一个命令,其中包含特殊字符。现在我不知道如何从每个单词中转义特殊字符。

/app/home/apache243/bin/httpd -f /app/apache$ configs/statichost1.conf

如你所见 apache$ configs 有特殊字符和空格。现在我想转义这个命令中的所有特殊字符,除了 /httpd -f / 。现在这个特殊字符可以出现在 /httpd -f / 之前和之后。即它可能是 apache $243 这个或这个 apache! 234@ 。 /httpd -f/ 之前和之后。我想要的在下面

/app/symc/apache243/bin/httpd -f /app/apache\$\ configs/statichost1.conf

【问题讨论】:

    标签: regex apache shell


    【解决方案1】:

    这样写命令(使用单引号):

    /app/symc/apache243/bin/httpd -f '/app/apache$ configs/statichost1.conf'
    

    顺便说一句,对于此类问题,如果您指定要搜索答案的外壳,它总是有帮助的。虽然在这种特殊情况下,至少在我所知道的所有 shell 中,引用的工作方式都是一样的,但这并不一定总是如此。

    【讨论】:

    • 此命令在运行时生成,它不是静态的。所以每次 /httpd -[A-z]/ 之前和之后的字符串都会被改变。它们可以包含特殊字符。这就像从除了 /httpd -[A-z]/ 之外的每个命令单词中转义特殊字符。 @user1934428 .它是一个 bash shell 。
    【解决方案2】:

    我找到了答案。 如果我们在 shell 脚本中有一个像这样的值的变量

    var=/app/home/apache243/bin/httpd -f '/app/apache$configs/statichost1.conf' 我们尝试执行(特定于 Apache 服务器配置)

    $var -S

    行不通。至少对我来说它没有用
    但是这样做

    eval $var -S 为我工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多