我有一个脚本可以检查以下函数的退出状态:
function is_git_repository {
git branch &> /dev/null
}
如果您使用的是git仓库,则返回0
;如果不是,则返回128
。
我测试返回值是否为0
没有问题;以下按预期工作:
if is_git_repository ; then
echo you are in a git repo
else
echo you are NOT in a git repo
fi
但是,当我遇到问题时,我正在尝试测试退出状态,而不是0
。我尝试了以下方法,但没有一个有效:
if [[ "$(is_git_repository)" != "0" ]] ; ...
始终评估为true(link)if [[ "$(is_git_repository)" -ne "0" ]] ; ...
始终评估为false if [[ "$(is_git_repository)" != 0 ]] ; ...
始终评估为真if [[ "$(is_git_repository)" -ne 0 ]] ; ...
始终评估为false if [[ ! "$(is_git_repository)" ]] ; ...
始终评估为真if !is_git_repository ; ...
只是将命令回复给我,但没有爆炸(wtf?)在if语句中检查命令的非零退出状态的正确方法是什么?
答案 0 :(得分:7)
我很快发现if ! is_git_repository ; then ...
按预期工作(在Introduction to if中查看 7.1.2.1。测试退出状态),但为什么?我本以为#1至少会起作用,但我不知道它为什么没有。
另外,#6是什么?!
答案 1 :(得分:1)
考虑布尔快捷方式而不是if
语句:
is_git_repository || echo you are NOT in a git repo