简单的bash函数不懂git

时间:2011-01-14 15:50:26

标签: bash

我使用自制软件在我的机器上安装了git,如下所示。

$ git --version
git version 1.7.3.4

我正在学习bash编程,我在〜/ .bashrc中有以下函数

function gitlab {
  CMD= "git --version"
  $CMD
}

然而,当我运行gitlab时,我得到以下输出

$ gitlab
-bash: git --version: command not found

我在mac上使用bash。

3 个答案:

答案 0 :(得分:3)

您的问题是CMD=之后的空格。评估结果为CMD=<empty string> "git --version"。首先,将环境变量CMD设置为空字符串,然后调用命令git --version。请注意,由于"...",shell确实尝试使用参数git --version执行命令git而不是--version。只需删除="之间的空格即可解决此问题。

答案 1 :(得分:2)

您将整个字符串作为单个命令运行。可以使用名为foo bar的二进制文件(空格),然后就像显示的那样运行它。

编辑:你究竟想做什么?在运行变量之前,无需在变量中存储命令:

gitlab() {git --version}

alias gitlab='git --version'

两者都与您对上述功能的期望相同。通常,建议在别名之上使用函数解决方案(并且不需要在其前面添加function)。

答案 2 :(得分:0)

当您尝试将字符串=分配给"git --version"变量时,CMD后面有一个多余的空格。 shell认为这是一个空字符串赋值给CMD变量,该变量只对下一个命令是本地的。当您的命令引用"时,shell会尝试执行名为git --version的程序。由于没有这样的程序,它失败了。

您的函数几乎与以下函数一样被解释(错误在这里更容易看到):

function() {
    CMD=
    "git --version"
    unset -v CMD
    $CMD
}

您应该删除空格字符,使其按照您的意图进行解释。但是,有更简单的方法来做同样的事情:

function gitlab() {
    git --version
}

如果你想要的是存储要存储在git --version变量中的CMD执行结果,你应该这样做:

function gitlab() {
    VERSION="$(git --version)"
    echo "$VERSION"
}

编辑:更正了我的回复,因为它不正确(@DarkDust发现错误)。