Bash 腳本:將檔案內容解析為陣列

Bash 腳本:將檔案內容解析為陣列

問候,

我正在編寫一個簡單的 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)

相關內容