
我嘗試使用 bash 字串本機操作來用我的 shell 變數取代字串。
var1='123'
var2='2018-01-01'
var3='2018-01-02'
var4='myfunction('var1','var2','var3')'
var5=${var4/var1/$var1}
echo $var5
var5=${var5/var2/$var2}
echo $var5
var5=${var5/var1/$var3}
echo $var5
預期輸出:
myfunction('123','var2','var3')
myfunction('123','2018-01-01','var3')
myfunction('123','2018-01-01','2018-01-02')
帶有混亂字串的實際輸出:
myfunction('123','var2','var3')
myfunction('123','2018-01-01','var3')
')function('123','2018-01-01','2018-01-02
這裡最後兩個字元在開頭移動,我遺失了字串的前兩個字元。我可以使用 SED 來實現相同的目的。但我只是想弄清楚為什麼 bash 本機字串操作不能按預期工作。是因為我做了多次替換嗎?
感謝您的幫助。
答案1
內容末端有一個回車符 (CR) var3
。在列印後,如果沒有緊跟著換行符(換行符,LF),該行的剩餘部分將從左邊緣列印,並覆蓋已列印的行開頭。
Unix 標準的行結束符是 LF,而不是 CR LF。
dos2unix
重寫在文件上定義或使用變數的腳本行。