没有评估参数的Shell脚本由' - '进行。

时间:2012-04-29 14:35:26

标签: git bash arguments

我正在编写一个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。

我的问题是,为什么这些都不起作用,以及实现这个的正确方法是什么?我的猜测是它与空格后面有一个双重破坏的参数有关,而最后一个长参数被视为一个命令本身(至少在第二个例子中),但这就是我直觉的程度。 / p>

帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

试试这个:

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

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