我正在编写一个脚本来循环访问一个目录,查看每个文件,并给出每个文件中某个单词的迭代。当我为特定目录编写它时,它工作正常,但是当我尝试使目录成为命令行参数时,它只给了我第一个文件的计数。我在想也许这与论点是单数(1 美元(有关,但我真的不知道。
工程
for f in /home/student/Downloads/reviews_folder/*
do
tr -s ' ' 'n' <$f | grep -c '<Author>'
done
输出
125
163
33
...
不起作用
for f in "$1"
do
tr -s ' ' 'n' <$f | grep -c '<Author>'
done
命令行输入
student-vm:~$ ./countreviews.sh /home/student/Downloads/reviews_folder/*
输出
125
shell 在将参数列表传递给脚本之前会扩展通配符。
要遍历作为命令行参数传入的所有文件,
for f in "$@"
do
tr -s ' ' 'n' <"$f" | grep -c '<Author>'
done
像这样运行它
./countreviews /home/student/Downloads/reviews_folder/*
或更一般
./countreviews ... list of file names ...
如您所发现的,"$1"
对应于扩展的通配符列表中的第一个文件名。
如果您为参数使用双引号,它应该可以工作。喜欢这个:
student-vm:~$ ./countreviews.sh "/home/student/Downloads/reviews_folder/*"
至少像这样它对我有用。我希望这对你有所帮助。