首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将通配符参数传递给bashrc函数

如何将通配符参数传递给bashrc函数
EN

Stack Overflow用户
提问于 2019-12-04 00:38:53
回答 1查看 113关注 0票数 0

我在我的.bashrc文件中设置了一个函数,允许我轻松地运行我在日常工作中经常使用的命令。有问题的函数:

代码语言:javascript
复制
chkerrors () { egrep -i 'page allocation failure|oom-killer|soft lockup|blocked for more' "$1"; }

我通常会在单个文件上运行此命令,例如:

代码语言:javascript
复制
$ chkerrors /var/log/messages

但是,在某些情况下,消息文件已转出,因此将有多个消息文件。

简单地运行相同的命令并在末尾抛出一个通配符似乎不能正常工作:

代码语言:javascript
复制
$ chkerrors /var/log/messages*

我的问题是,我如何调整我的函数,以便允许我使用通配符运行类似于上面的命令?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-04 00:43:34

当您调用chkerrors /var/log/messages*时,glob在调用函数之前会被bash展开,例如,实际的函数调用是chkerrors /var/log/messages1 /var/log/messages2 /var/log/messages3

这意味着该函数接收多个参数,但您只处理第一个参数$1。相反,您将希望使用"$@"处理它的所有参数:

代码语言:javascript
复制
chkerrors () { egrep -i 'page allocation failure|oom-killer|soft lockup|blocked for more' "$@"; }

"$@"的特殊之处在于,它不会像引号一般所暗示的那样展开到单个单词,而是展开到一个带引号的单词列表,因此,与glob匹配的每个文件都将被视为egrep命令的附加参数,并且包含IFS字符的文件将被正确地视为单个参数,而不是一分为二。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59161586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档