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 の改行で作成されたかどうかに関係なく、これを機能させる必要がありますが、シェル スクリプトについては初心者なので、どのように実行すればよいかよくわかりません。

私はあなたの助けに感謝します!

答え1

各行を処理するときに、キャリッジ リターンを削除するだけでよいようです。本当に簡単な方法は ユーティリティを使用することですdos2unixが、システムにそれがなかったり入手できない場合は、 で同様のことを実現できますtr。例:

echo $PATH | tr -d '\r'

を使用するなどのその他のアイデアsedについては、ウィキペディアエントリ。

編集:$PATHは、間違いなく環境によって設定され、他のプログラムがその値に依存する可能性があるため、適切な変数名ではない ことを指摘しておきます$CUR_PATH。 のように変更することを検討してください。

答え2

スクリプトの最初の行を変更するだけです。

CONTENT=$(tr -d \\r < /path/to/text/file.txt)

関連情報