我在执行 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'
(...)表示省略整个系统数据块
答案1
代替
set $line
使用
set -- $line
阅读help set
后你就会明白为什么这是有效的。