У меня проблема с выполнением цикла while, я обнаружил, что проблема связана с выполнением команды set, а назначение символа \ n переменной среды представляет собой проблему. Почему это происходит и как это решить?
мой код:
echo "Enter a filename:\c"
read fname
terminal=`tty`
exec < $fname
nol=0
now=0
while read line
do
nol=`expr $nol + 1`
set $line
now=`expr $now + $#`
done
echo "Number of lines:$nol"
echo "Number of words:$now"
exec < $terminal
Когда он встречает строку, содержащую только символ новой строки, он печатает системные данные и все переменные:
CINNAMON_VERSION='1.8.8'
COLORTERM='gnome-terminal'
(...)
fname='drunk'
line=''
nol='19'
now='137'
terminal='/dev/pts/0'
[ 115] (...) указывает на пропуск всего блока системных данных
Вместо
set $line
используйте
set -- $line
Прочитайте help set
, чтобы понять, почему это работает.