我正在编写一个脚本来遍历目录,浏览每个文件,并给出每个文件中某个单词的迭代。当我为特定目录编写它时,它可以正常工作,但是当我尝试将该目录作为命令行参数时,它只为我提供第一个文件的计数。我当时在想这可能与它有关,参数是单数($ 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
答案 0 :(得分:0)
在将参数列表传递到脚本之前,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"
对应于扩展的通配符列表中的第一个文件名。
答案 1 :(得分:-1)
如果您对参数使用双引号,则它应该起作用。像这样:
student-vm:~$ ./countreviews.sh "/home/student/Downloads/reviews_folder/*"
至少这样对我有用。希望对您有帮助。