Bash
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 ?] 消失了,因為它在換行符之後被覆蓋。我以前從未見過這個…
\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
)。