【问题标题】:Shell substring with sed in a variable变量中带有 sed 的 Shell 子字符串
【发布时间】:2016-07-29 11:59:55
【问题描述】:

我在 bash linux 中试过这个命令

echo "example=value" | sed "s/^example=\(.*\)$/\1/"

输出为value。但是如果我把它放在一个变量中,它就不起作用了。

例如:

var="example=value" | sed "s/^example=\(.*\)$/\1/"
echo $var

输出什么都没有。怎么了?

【问题讨论】:

  • var=$(echo "example=value" | sed "s/^example=\(.*\)$/\1/")
  • 我会收紧你的 sed,并使用强引号:var=$(echo "example=value"|sed 's/^.*=\(.*\)/\1/')
  • 在尝试编写更多的 shell 脚本之前,请阅读 Chris Johnson 的《Shell Scripting Recipes》一书,因为您缺少一些重要的基础知识,并且在没有学习基础知识的情况下即将开始编写非常脆弱的 shell 脚本的职业生涯.

标签: linux bash sed substring


【解决方案1】:

分配变量不会通过管道将值传递给sed

你可以像这样分配时通过:

var="example=value" && echo "$var" | sed "s/^example=\(.*\)$/\1/"

或使用这样的子外壳:

var=$(echo "example=value" | sed "s/^example=\(.*\)$/\1/")

【讨论】:

    【解决方案2】:

    这样做:

    var=$(echo example=value | sed "s/^example=\(.*\)$/\1/")
    echo $var
    

    【讨论】:

    • 要添加,$() 告诉 bash 将值作为右操作数返回给 =。
    【解决方案3】:

    您可以在不使用 sed 的情况下执行此操作,使用 shell parameter expansion:

    $ var="example=value"
    $ var="${var#*=}"
    $ echo "$var"
    value
    

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 2010-10-20
      • 1970-01-01
      • 2017-10-25
      • 2011-10-13
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多