Обратите внимание, что это псевдокод, и я не пытаюсь подсчитывать строки таким образом, этот вопрос состоит в том, чтобы выяснить, как включить полностью пустые символы новой строки в цикл 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 равно 2 вместо 5.
Я подумал, что 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
Я думаю, что необходимо будет использовать while read line
вместо этого:
x=0
while read line ; do
x=$(($x+1))
done
Вы не можете сделать этого использования полевого разделения оболочки.
Смежные пробельные символы от IFS
анализируются вместе, таким образом, Вы не можете использовать полевое разделение для различения смежные пробельные символы IFS. Из стандарта ( Shell и Утилиты , разделяют 2.6.5 ):
Каждое возникновение во входе символа IFS, который не является пробелом IFS, наряду ни с каким смежным пробелом IFS, должно разграничить поле, как описано ранее.
Это, как это.
, Так как это - гипотетический вопрос, и Вы не сказали, что это точно, что Вы делаете, я не предложу иначе.