Linux之CRLF/CR/LF等回車換行符的問題

引言

在開發階段,開發環境測完的配置文件(頁面化管理)和shell腳本在上生產時,出現瞭字符和變量(變量從配置文件中獲取)拼接缺失等莫名其妙的問題。

名稱介紹

ASCII字符代碼表

ASCII碼

維基百科

CR

維基百科CR

CR: Carriage Return,對應ASCII中的轉義字符是\r,對應ASCII值是13,常用於Macintosh(早期的Mac OS)系統單個字符,

表示回車

LF

維基百科LF  

LF: Line Feed,對應ASCII中的轉義字符是\n,對應ASCII值是10,常用於Unix/Linux/Mac OS X系統中單個字符,表示換行

CRLF

維基百科CRLF

CRLF: Carriage Return & Line Feed,對應ASCII中的轉義字符是\r\n,常用於Window系統中兩個字符,表示回車並換行

問題

shell腳本在不同系統使用問題

問題描述

Windows系統開發瞭某個shell腳本,默認是CRLF格式的,在轉移到Linux系統上執行時,無法正常執行。

解決方案

方案一:使用notepad++

打開notepad++軟件,顯示符號

notepad++顯示符號

或者

notepad++快捷鍵顯示符號

替換所有CRLFLF

notepad++轉換字符格式

或者

notepad++全局替換字符

方案二:使用Linux系統相關命令將文件轉化為unix格式

一共有三種方式:

  • 使用dos2unix命令dos2unix file_name,前提是Linux安裝瞭該命令功能。
  • 使用sed命令sed -i "s/\r//" file_name或者sed -i "s/^M//" file_name將回車字符刪除掉。
  • 使用vi/vim命令,執行:set ff=unix將文件設置為unix格式文件。

shell腳本所獲取的配置文件內容字符存在^M字符

問題描述

通過使用cat -A file_name的命令可以查看隱藏的字符,shell腳本所獲取的配置文件內容字符存在^M字符,即存在\r回車字符。

存在^M字符

解決方案

在shell腳本對變量使用

key1=`echo $key1 | sed "s/\r//g"`

總結

名詞 含義 ASCII字符 系統
CR Carriage Return,回車 \r Macintosh(早期的Mac OS)系統
LF Line Feed,換行 \n Unix/Linux/Mac OS X系統
CRLF Carriage Return & Line Feed`,回車並換行 \r\n Window系統

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: