首頁 > 軟體

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

2023-09-16 06:00:51

引言

在開發階段,開發環境測完的組態檔(頁面化管理)和shell指令碼在上生產時,出現了字元和變數(變數從組態檔中獲取)拼接缺失等莫名其妙的問題。

名稱介紹

ASCII字元程式碼錶

CR

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

表示回車

LF

  

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

CRLF

CRLF: Carriage Return & Line Feed,對應ASCII中的跳脫字元是rn,常用於Window系統中兩個字元,表示回車並換行

問題

shell指令碼在不同系統使用問題

問題描述

Windows系統開發了某個shell指令碼,預設是CRLF格式的,在轉移到Linux系統上執行時,無法正常執行。

解決方案

方案一:使用notepad++

開啟notepad++軟體,顯示符號

或者

替換所有CRLFLF

或者

方案二:使用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回車字元。

解決方案

在shell指令碼對變數使用

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

總結

名詞含義ASCII字元系統
CRCarriage Return,回車rMacintosh(早期的Mac OS)系統
LFLine Feed,換行nUnix/Linux/Mac OS X系統
CRLFCarriage Return & Line Feed`,回車並換行rnWindow系統

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com