Bash 基本的な文字列操作により、混乱した出力が表示されます。

Bash 基本的な文字列操作により、混乱した出力が表示されます。

bash文字列基本操作を使用して、文字列を私のシェル変数に置き換えようとしています。

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

ここで、最後の2文字が最初の部分から移動され、文字列の最初の2文字が失われます。 SEDを使用して同じ目的を達成できます。しかし、私はbashの基本的な文字列操作が期待どおりに機能しない理由を理解しようとしています。何度か交換したからですか?

ご協力ありがとうございます。

答え1

コンテンツの末尾にキャリッジリターン(CR)がありますvar3。印刷の直後に改行文字(改行、LF)がない場合は、行の残りの部分が左端から印刷され、すでに印刷されている行の先頭を上書きします。

標準の Unix 行終端は CR LF ではなく LF です。

dos2unixファイル内で変数を定義または使用するスクリプト行をオーバーライドします。

関連情報