sed 给出无效算术运算符错误

sed 给出无效算术运算符错误

sed不断给出无效算术运算符错误。我试图将 sed 的输出分配给一个变量。

这个有效,

var=$(sed  -e 's/"currentGeneration":5010/"currentGeneration":5011/'  <<< $content )

但是当我尝试对变量而不是 5010 和 5011 执行相同操作时,它会因算术运算符无效而失败

var=$((sed  -e 's/"currentGeneration":$currg/"currentGeneration":$nextg/'  <<< $content ))

我也在下面尝试过,但它不能替代任何东西。

var=$(sed  -e 's/"currentGeneration":$currg/"currentGeneration":$nextg/'  <<< $content )

我很确定我错过了一些基本的东西。在工作中学习 shell 脚本:(

答案1

在你的命令下

var=$(sed  -e 's/"currentGeneration":$currg/"currentGeneration":$nextg/'  <<< $content )

$currg并且$nextg没有展开因为它们不在双引号之间

为了避免这个问题,您有几个选择:

  • 使用sed双引号括起来并转义内部双引号:

    $ var=$(sed  -e "s/\"currentGeneration\":$currg/\"currentGeneration\":$nextg/"  <<< "$content" )
    
  • 连接单引号和双引号:

    $ var=$(sed  -e 's/"currentGeneration":'"$currg"'/"currentGeneration":'"$nextg/"  <<< "$content" )
    

请注意,$content应该用双引号引起来。

(( 是评估算术运算的复合命令,所以它没有做你想做的事。

相关内容