
文字列をシェル変数に置き換えるために、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
ファイル上で使用します。