我可以使用“which”命令进行部分匹配吗?

我可以使用“which”命令进行部分匹配吗?

我想查找所有名称为“gcc”、“gcc-4.2”、“gcc-4.9”等的程序。

为了查找我尝试过的所有二进制文件which -a gcc*

但是“*”在命令中不被识别为‘任何’ which

有没有办法通过模式匹配来找到 PATH 环境变量中的所有程序?

答案1

有一个BASH内置命令compgen可用于列出所有命令功能别名内置

compgen -abck | grep "gcc"

参数:help compgen

compgen:
[-abcdefgjksuv] 
[-o option]
[-A action]
[-G globpat]
[-W wordlist]
[-F function]
[-C command]
[-X filterpat]
[-P prefix]
[-S suffix]
[word]

答案2

这是一个快速而粗糙的示例脚本,可以在实践中完成您想要的操作:

#!/bin/sh
IFS=:
for i in $PATH; do
    for j in "$i"/$1; do
        [ -f "$j" ] && [ -x "$j" ] && printf '%s\n' "$j"
    done
done

将其保存为 egwhichglob并使其可执行。示例运行:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin
$ ./whichglob grep*
/usr/bin/grepdiff
/usr/bin/grep-excuses
/usr/bin/grepjar
/bin/grep

which实际上, ( 、退出状态、多个文件匹配输入)中的所有功能-a都可以轻松地添加到这个 shell 脚本上下文中,但我将其留给读者作为练习。

相关内容