我想要做类似于以下的事情:
if [[ git status &> /dev/null ]]; then
echo "is a git repo";
else
echo "is not a git repo";
fi
除了我不知道如何检查退出状态,我应该如何解决这个问题?
$?
包含了最近一次命令的返回码。git status &> /dev/null
if [ $? -eq 0 ]; then
echo "git status exited successfully"
else
echo "git status exited with error code"
fi
就是这样简单
if git status &> /dev/null
then
echo "is a git repo";
else
echo "is not a git repo";
fi
或者更紧凑的形式:
git status &> /dev/null && echo "is a git repo" || echo "is not a git repo"
git status &> /dev/null
if (( $? )) then
desired behavior for nonzero exit status
else
desired behavior for zero exit status
fi
(( expression ))
语法遵循大多数编程语言的通常约定,即非零表达式计算为true,而零计算为false。其他替代方案([ expression ]
、[[ expression ]]
、if expression
、test expression
等)遵循通常的shell约定,即0(无错误)计算为true,非零值(错误)计算为false。因此,如果您使用此答案,则需要从其他答案切换if
和else
子句。$
符号来引用变量。请参阅http://www.bash2zsh.com/zsh_refcard/refcard.pdf:“`var`(前面不需要`$`,除非需要一些替换,例如`${#var}`,如果要修改`var`,则`$`是错误的)”。 - ericbn
git status
可以因为很多原因返回非零的退出代码,而不仅仅是 git 仓库不存在的情况。 - erb