1

有一个文件名为pkg_list

a-1.2b-1.tar.gz
c-2.5b-1.tar.gz
a xx-1.4.txz
a$xx-1.4.txz
中文-3.txz
xx-3.2-2.tar.gz
xxy-1.3.tar.gz

我的 bash 函数可以输入像“xx”这样的包名

pkg_find() { # <pkg_name> as $1
  grep "^$1-[0-9]*" pkg_list
}
pkg_find xx # wish it return xx-3.2-2.tar.gz

我知道我不能将 $1 直接传递给 pkg_find,正确的方法是什么?

[已解决] 在这种情况下,因为 $1 用双引号括起来,我发现即使是正则表达式元字符也可以作为参数传递。

4

3 回答 3

2

你在做什么在我看来是对的。

什么不工作?

我尝试了您问题中的代码,并pkg_find xx显示“xx-3.2-2.tar.gz”——您说这是您希望的输出。

于 2013-01-09T09:55:46.947 回答
1

可以直接传到$1_pkg_find

pkg_find() { # <pkg_name> as $1
  grep "^$1-[0-9]*" pkg_list
}
pkg_find "$1"

在主体中,$1, $2, ..脚本参数,您可以从命令行或其他调用脚本中获得。在shell 函数中,它们指的是函数参数。

当您在命令行上调用它时

sh pkg_find.sh xx

你会得到

xx-3.2-2.tar.gz

于 2013-01-09T10:37:48.207 回答
0

您的代码和您的问题在我看来似乎要求不同的东西,您想要/两者之一:

脚本顶层的 $1、$2 等是脚本参数;在函数中,它们被设置为函数参数,如果没有参数,则取消设置。

于 2013-01-09T10:04:05.510 回答