Git Shell脚本未计算由'--';

Git Shell脚本未计算由'--';,git,bash,arguments,Git,Bash,Arguments,我正在编写一个shell脚本,或者更确切地说,是一个ZSH函数,我正在使用各种简短的命令来检查git存储库等的状态 然而,我在一个特别的命令上遇到了很多麻烦。在另一篇stackoverflow文章中,我找到了打印git存储库根文件夹的命令: git rev-parse --show-top-level 在我的实际zsh实例中,如果我执行 $(git rev-parse --show-top-level) 返回适当的值,一切正常。然而,我的脚本中的这种方法并没有很好地工作。我将给出一个小背景:

我正在编写一个shell脚本,或者更确切地说,是一个ZSH函数,我正在使用各种简短的命令来检查git存储库等的状态

然而,我在一个特别的命令上遇到了很多麻烦。在另一篇stackoverflow文章中,我找到了打印git存储库根文件夹的命令:

git rev-parse --show-top-level
在我的实际zsh实例中,如果我执行

$(git rev-parse --show-top-level)
返回适当的值,一切正常。然而,我的脚本中的这种方法并没有很好地工作。我将给出一个小背景:

[ $(git status &>/dev/null) $? -eq "0" ] && {
    git_name=$("git rev-parse --show-top-level")
    echo $(eval $git_name)
}
现在我不知道你的情况,但在我看来,这样做是错误的(不是第一行,我同意)。其结果大致如下:

command not found: git rev-parse --show-top-level
我似乎应该这样写:

[ $(git status &>/dev/null) $? -eq "0" ] && {
    git_name=$(git rev-parse --show-top-level)
    echo $git_name
}
其输出为:

--show-top-level
退出状态为0

我的问题是,为什么这两种方法都不起作用,正确的方法是什么?我的猜测是,它与空格后有一个双虚线参数有关,最后一个长参数被视为命令本身(至少在第二个示例中),但这是我直觉的范围

谢谢你的帮助

试试这个:

[ $(git status &>/dev/null) $? -eq "0" ] && {
    git_name=$(git rev-parse --show-toplevel)
    echo $(eval $git_name)
}

git rev parse
周围的双引号是不必要的,参数应该是
--show top level
,而不是
--show top level

太棒了!非常感谢你!