LoginSignup
0
0

WindowsのGit bashでファイルの中身を1行ずつ読み込む際の注意点

Last updated at Posted at 2024-04-09

はじめに

テキストファイルの中身を1行ずつ読み込んで処理するシェルスクリプトを書いたときに、意図しない動作になり解決に至ったので記事にします。
(めちゃくちゃ初歩的な内容です)

結論

 /\/\/\/\/\/\/\/\/\/\/\/\
<                        >
<  読み込むファイルの改行コードをLFにしよう!  >
<                        >
 \/\/\/\/\/\/\/\/\/\/\/\/

環境

Windows11
Git bash
VS Code(ファイルの作成、改行コードの確認、変更に使用)

再現

読み込んだ内容をそのまま表示

for id in $(cat ids.txt); do echo $id; done
ids.txt(CRLF)
1234
2345
3456
結果
1234
2345
3456

ここまでは問題ない

読み込んだ内容を文字列内に埋め込んで表示

for id in $(cat ids.txt); do echo "\"$id\""; done
ids.txt(CRLF)
1234
2345
3456
結果
"1234
"2345
"3456"

出力結果がおかしくなる

while readに変えてみる

while read id; do echo "\"$id\""; done < ids.txt
ids.txt(CRLF)
1234
2345
3456
結果
"1234
"2345
"3456"

これでも変わらない

原因

特に調べたりしたわけではなく何となく思いついただけなのですが、原因はids.txtの改行コードがCRLFだったからでした。

for id in $(cat ids.txt); do echo "\"$id\""; done
ids.txt(LF)
1234
2345
3456
結果
"1234"
"2345"
"3456"

改行コードをLFになおすとforでもwhileでもうまくいきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0