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



我正在编写一个脚本来循环访问一个目录,查看每个文件,并给出每个文件中某个单词的迭代。当我为特定目录编写它时,它工作正常,但是当我尝试使目录成为命令行参数时,它只给了我第一个文件的计数。我在想也许这与论点是单数(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/*"

至少像这样它对我有用。我希望这对你有所帮助。

最新更新