Bash

Bash 將 r 添加到每個字元串

  • March 9, 2020

我正在嘗試創建一個簡單的 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)。

引用自:https://unix.stackexchange.com/questions/572024