脚本更改方式代码功能的命令行参数

时间:2019-02-08 12:42:51

标签: bash unix

我正在编写一个脚本来遍历目录,浏览每个文件,并给出每个文件中某个单词的迭代。当我为特定目录编写它时,它可以正常工作,但是当我尝试将该目录作为命令行参数时,它只为我提供第一个文件的计数。我当时在想这可能与它有关,参数是单数($ 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

2 个答案:

答案 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/*"

至少这样对我有用。希望对您有帮助。