设置命令无法处理由 \n 组成的行(字数/行数统计脚本)

设置命令无法处理由 \n 组成的行(字数/行数统计脚本)

我在执行 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后你就会明白为什么这是有效的。

相关内容