Bash 將 \r 加到每個字串

Bash 將 \r 加到每個字串

我正在嘗試創建一個簡單的 Linux BASH 腳本,但請注意 bash 正在向每個字串添加 \r,如果我嘗試使用 'tr' 刪除它,那麼它只會添加一個新字串!這是我的腳本

#!/bin/bash
OUTFILE=$(echo -n `date +"%Y-%m-%d_%H-%m-%S"`)
ASD='DDD'
echo -n "DATE [$OUTFILE]"
echo -n "DDD [$ASD]"

這是輸出

 bash -x backup-datadir.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_13-03-44
+ OUTFILE=$'2020-03-09_13-03-44\r'
+ ASD=$'DDD\r'
' echo -n 'DATE [2020-03-09_13-03-44
' echo -n 'DDD [DDD-03-44

為什麼會出現多餘的 \r ? ] 消失了,因為它在換行符之後被覆蓋。我以前從未見過這個...

答案1

\r您的腳本是一個 DOS 文字文件,這意味著它在每一行的末尾都包含一個回車符(通常寫為)。 Unix 文字檔案沒有這個,當 Unix 系統輸出這樣的字元時,它會導致遊標位置移動到行的最開始。對該行的進一步輸出將覆蓋先前輸出的內容。

將腳本轉換為 Unix 文字檔案將解決您的問題:

$ bash -x script.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_21-03-47
+ OUTFILE=$'2020-03-09_21-03-47\r'
+ ASD=$'DDD\r'
' echo -n 'DATE [2020-03-09_21-03-47
' echo -n 'DDD [DDD-03-47
$ dos2unix script.sh
dos2unix: converting file script.sh to Unix format...
$ bash -x script.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_21-03-03
+ OUTFILE=2020-03-09_21-03-03
+ ASD=DDD
+ echo -n 'DATE [2020-03-09_21-03-03]'
DATE [2020-03-09_21-03-03]+ echo -n 'DDD [DDD]'
DDD [DDD]

(由於使用了,最後一行輸出後沒有換行符echo -n)。

$ bash script.sh
DATE [2020-03-09_21-03-19]DDD [DDD]

(由於使用了,最後一行輸出後沒有換行符echo -n)。

相關內容