Bash

sed 給出無效的算術運算符錯誤

  • September 27, 2021

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 腳本:(

在你的指揮下

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應該用雙引號括起來。

(( 是評估算術運算的複合命令,因此它沒有按照您的意圖進行。

引用自:https://unix.stackexchange.com/questions/670856