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

How to pass a wildcard parameter to a bashrc function

我在 .bashrc 文件中设置了一个功能,使我可以轻松 运行 我在日常工作中经常使用的命令。相关函数:

chkerrors () { egrep -i 'page allocation failure|oom-killer|soft lockup|blocked for more' ""; }

我通常会 运行 将其放在单个文件中,例如:

$ chkerrors /var/log/messages

然而,有些情况下消息文件已被轮换,因此会有多个消息文件。

简单地运行使用相同的命令并在末尾添加通配符似乎无法正常工作:

$ chkerrors /var/log/messages*

我的问题是,我该如何调整我的功能,以便 运行 类似于上面的带通配符的命令?

谢谢!

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

这意味着该函数接收多个参数,但您只处理第一个参数,</code>。您将改为使用 <code>"$@" :

来处理其所有参数
chkerrors () { egrep -i 'page allocation failure|oom-killer|soft lockup|blocked for more' "$@"; }

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