Shell中变量的作用域问题

Beanocean 2014-08-05 10:48:12
任务描述:
在文件features.txt中,有大概1000条记录,每条记录占据一行。记录的格式为:[label] [feature]
举例为: romantic 1 2 893 544 32 2 .... 2323 990
现在,我要统计features.txt中有多少中label,以及每个label对应的记录的数量。
我的方法如下:

file=featrues.txt
cut -d ' ' -f 1 $file | cut -d '-' -f 1 | sort -u | \
while read line; do
num=$(grep $line $file | wc -l)
numlist="$numlist $num"
echo $line $num
done
echo $numlist

第一行中,通过字段的截取获得了features.txt中的label,然后通过grep查找,计算每个label的数量。打印结果如下:

baroque 100
blues 99
classical 100
country 100
electronica 100
hip 99
jazz 100
metal 100
rock 99
romantic 99


在while循环中的统计结果正确了,但是打印$numlist时却出现了问题,$numlist为空字符串,这是怎么回事儿呢?
...全文
178 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
colddown 2014-08-05
  • 打赏
  • 举报
回复
因为你的while循环在管道里,因此会运行在子shell里,修改的变量是子shell的变量。用shell需要特别注意这一点
夏天__ 2014-08-05
  • 打赏
  • 举报
回复
使用管道的问题,学习啦

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧