我在我的bash脚本中有两个软件版本检查,不能像我预期的那样工作.
DRUSH_VERSION="$(drush --version)"
echo ${DRUSH_VERSION}
if [[ "$DRUSH_VERSION" == "Drush Version"* ]]; then
echo "Drush is installed"
else
echo "Drush is NOT installed"
fi
GIT_VERSION="$(git --version)"
echo ${GIT_VERSION}
if [[ "GIT_VERSION" == "git version"* ]]; then
echo "Git is installed"
else
echo "Git is NOT installed"
fi
响应:
Drush Version : 6.3.0
Drush is NOT installed
git version 1.8.5.2 (Apple Git-48)
Git is NOT installed
同时,如果我改变
DRUSH_VERSION=”${drush –version)”
至
DRUSH_VERSION=”Drush Version : 6.3.0″
它响应
Drush is installed
现在我会用
if type -p drush;
但我还是想得到版本号.
最佳答案 您可以解决几个问题.首先,如果您不关心可移植性,那么您希望使用子字符串匹配运算符=〜而不是==.那将在git版本1.8.5.2(Apple Git-48)中找到git版本.其次,您在[[“GIT_VERSION”==“git version”]]测试中缺少$.
因此,例如,如果您按如下方式更改测试,则可以匹配子字符串. (注意:=〜仅适用于[[]]运算符,您需要删除任何通配符*).
if [[ "$DRUSH_VERSION" =~ "Drush Version" ]]; then
...
if [[ "$GIT_VERSION" =~ "git version" ]]; then
...
此外,如果您只是检查程序的存在而不是特定的版本号,那么您可能最好使用:
if which $prog_name 2>/dev/null; then...
或使用复合命令:
which $prog_name && do something found || do something not found
例如.对于git:
if which git 2>/dev/null; then
...
要么
which git && echo "git found" || echo "git NOT found"
注意:将stderr重定向到/ dev / null只是为了防止在系统上没有$prog_name的情况下错误在屏幕上喷出.