测试是否支持命令选项

Jus*_*yes 4 bash shell

在我的中.bashrc,grep --color 如果--color支持该选项,我想将grep替换为别名.但是--color像msysgit这样的旧系统不支持:

$ grep --color
grep: unrecognized option '--color'
$ grep --version
grep (GNU grep) 2.4.2
Run Code Online (Sandbox Code Playgroud)

在.bashrc中,如何确定是否支持选项?我可以测试一个硬编码的版本号,但是对于版本> 2.5会破坏:

if [[ `grep --version` == *2.5* ]] ; then
    alias grep='grep --color=auto'
fi
Run Code Online (Sandbox Code Playgroud)

是否有更可靠的方法来测试命令是否支持选项?

cmh*_*cmh 8

拿一个你知道会成功的grep命令并添加颜色选项Eg

grep --color "a" <<< "a"
Run Code Online (Sandbox Code Playgroud)

如果选项存在,则返回码为0,否则为正.

所以你的bashrc看起来像:

if grep --color "a" <<<"a" &>/dev/null; then
    alias grep='grep --color=auto'
fi
Run Code Online (Sandbox Code Playgroud)

&>将stdout stderr 发送到/ dev/null,因此如果命令失败,它将被静音.但它仍然返回错误代码,这会阻止设置别名.