これは擬似コードであり、この方法で行をカウントしようとはしていないことに注意してください。この質問は、forループに完全に空白の改行を含める方法を見つけることです。
cat file
Word
Word
合計5行あるため、xは最後に5になります。
IFS=$'\n'
x=0
for line in $(cat file) ; do
x=$(($x+1))
done
echo $x
ただし、空白の改行はカウントされず、xは5ではなく2になります
IFS=$'\n'
は、私が望んでいたようにこの作品を作っていたでしょう。誰かがforループで空白の改行を「カウント」する方法を説明できますか?
read
ループの代わりにwhile
ループでfor
を使用してこれを行うことができます。
#!/bin/bash
while read line; do
((x++))
done < file
echo $x
exit 0
~$ cat file
Word
Word
~$ bash script.sh
5
シェルのフィールド分割を使用してこれを行うことはできません。
IFS
からの隣接する空白文字は一緒に解析されるため、フィールド分割を使用して隣接する空白IFS文字を区別することはできません。標準(ShellおよびUtilities、 セクション2.6.5 )から:
IFSの空白ではないIFS文字の入力での各出現は、隣接するIFSの空白とともに、前述のようにフィールドを区切る必要があります。
それだけです。
これは仮説的な質問であり、あなたがやっていることを正確に言っていないため、別の方法を提案することはしません。
代わりにwhile read line
を使用する必要があると思います。
x=0
while read line ; do
x=$(($x+1))
done