2013-03-25 136 views
0

我递归计数格式在命令行中作为参数给定的文件中的行,例如, * .txt ...在这个例子中,我正在搜索所有.txt文件并计算它们的行数。另外,我必须回显输入参数。我的问题是回声,当我尝试“$ 1”时,它扩展并回显所有的.txt文件,也与'$ 1'相呼应$ 1 ...我想要的不是扩展,而是回声原始输入,在这种情况下*。文本。参数扩展bash

编辑:

我打电话用2个参数的脚本,首先是递归的开始目录,并且第二个是期望的文件类型的格式。

./script.sh test *.txt 

然后,我需要回声双方的参数和递归数,其格式给出第二个参数

echo $1 
echo $2 

find /$1 -name "$2" | wc -l 

这个代码不当前正在使用的文件的线条,但我m试图首先修复参数回声。

+3

请显示你的代码,这听起来像你期望'* .txt'被传递给你的脚本, ,shell将扩展它,而是将与该模式匹配的文件传递给您的脚本吨。 – chepner 2013-03-25 23:04:50

+0

我编辑了我的帖子,请现在检查一下:) – Luka 2013-03-25 23:12:41

回答

1

没有办法只为你的特定脚本做到这一点。不要试图使./script.sh foo *.txt以您想要的方式工作。这不是贝壳如何工作,也没有其他公用工具。

相反,你应该这样做同样的方式findgrep做的:简单地要求用户引用:

./script.sh foo '*.txt' 

当你这样做,你可以script.sh使用$2报价保持它作为一种模式(就像在你的find /$1 -name "$2" | wc -l中一样,或者不加引号将它扩展为多个文件名,就像在你的echo $2中一样)

+0

谢谢,我正在考虑这个问题,但我认为这可以解决我的(错误的)方法。 – Luka 2013-03-25 23:30:13

2

如果你真的要禁用glob ING(这是奇数),您可以设置:

set -o noglob 

要重新设置这个选项为关闭:

set +o noglob 

但我不知道你真的想做什么,但我觉得你做错了。你应该考虑在上下文中给出更多的解释

+0

有没有更优雅的解决方案,或者这是唯一的方法? – Luka 2013-03-25 23:23:10

+0

在您的评论前几​​秒看到我的编辑 – 2013-03-25 23:23:50

+0

您是否看到我的编辑?我必须用第二个参数中给出的格式对所有文件的行进行计数。第一个参数是起始目录,它递归地进入所有子目录。另外,我必须回显第二个参数 – Luka 2013-03-25 23:27:37