当前位置: 技术问答>linux和unix
Shell中变量的作用域问题
来源: 互联网 发布时间:2017-05-25
本文导语: 任务描述: 在文件features.txt中,有大概1000条记录,每条记录占据一行。记录的格式为:[label] [feature] 举例为: romantic 1 2 893 544 32 2 .... 2323 990 现在,我要统计features.txt中有多少中label,以及每个label对应的记...
任务描述:
在文件features.txt中,有大概1000条记录,每条记录占据一行。记录的格式为:[label] [feature]
举例为: romantic 1 2 893 544 32 2 .... 2323 990
现在,我要统计features.txt中有多少中label,以及每个label对应的记录的数量。
我的方法如下:
第一行中,通过字段的截取获得了features.txt中的label,然后通过grep查找,计算每个label的数量。打印结果如下:
在while循环中的统计结果正确了,但是打印$numlist时却出现了问题,$numlist为空字符串,这是怎么回事儿呢?
在文件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为空字符串,这是怎么回事儿呢?
|
因为你的while循环在管道里,因此会运行在子shell里,修改的变量是子shell的变量。用shell需要特别注意这一点