問候,
我正在編寫一個簡單的 bash 腳本,需要將文件的內容解析為陣列。文件中的條目以「換行」分隔——因此文件看起來像這樣:
path/to/file
path/to/other/file
我想解析內容並迭代它們。我的程式碼目前如下所示:
CONTENT=`cat /path/to/text/file.txt`
for PATH in $CONTENT
do
echo $PATH
chmod -R 440 $PATH
fi
此程式碼非常適用於具有 UNIX 行結尾的檔案。然而,對於 Windows 格式的文字文件,它會令人窒息。 「echo $PATH」語句產生正確的路徑,但 chmod 失敗,表示該檔案不存在。我的訣竅是 Windows 行尾沒有修剪,因此它嘗試 chmod 包含新行字元的檔案路徑。
無論目標檔案是使用 Unix 還是 Windows 換行符號創建的,我都需要讓這個東西工作——但鑑於我對 shell 腳本有些陌生,我不太確定如何做到這一點。
我感謝您的幫助!
答案1
聽起來您只需要在處理每一行時刪除回車即可。真正簡單的方法是使用該dos2unix
實用程序,但如果您的系統沒有該實用程式或您無法取得它,您可以使用 完成類似的事情tr
,例如:
echo $PATH | tr -d '\r'
更多想法,例如使用sed
,可在維基百科入口。
編輯: 我應該指出,這$PATH
不是一個很好的變數名,因為它無疑是由環境設定的,而其他程式可能依賴它的值。您應該考慮將其更改為類似$CUR_PATH
.
答案2
我只需更改腳本的第一行:
CONTENT=$(tr -d \\r < /path/to/text/file.txt)