Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单bash函数不理解git_Bash - Fatal编程技术网

简单bash函数不理解git

简单bash函数不理解git,bash,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。您正在将整个字符串作为单个命令运行。有可

我使用自制软件在我的机器上安装了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。

您正在将整个字符串作为单个命令运行。有可能有一个名为foo-bar的二进制文件,其中包含一个空格,您可以按照所示的方式运行它

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

gitlab() {git --version}


这两个函数的作用与您从上述函数中所期望的相同。通常,建议在别名上方使用函数解决方案,并且不需要在其前面加上函数前缀。

您可以将整个字符串作为单个命令运行。有可能有一个名为foo-bar的二进制文件,其中包含一个空格,您可以按照所示的方式运行它

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

gitlab() {git --version}


这两个函数的作用与您从上述函数中所期望的相同。通常,建议在别名上方使用函数解决方案,并且不需要在别名前面加上函数前缀。

尝试将字符串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发现了错误。

尝试将字符串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发现的错误。

您的问题是CMD=后面的空格。计算结果为CMD=git-version。首先,将环境变量CMD设置为空字符串,然后调用命令git-version。请注意,由于。。。shell确实尝试执行git-version命令,而不是git-with-argument-version命令。只需删除=和之间的空格即可解决此问题。

您的问题是CMD=之后的空格。计算结果为CMD=git-version。首先,将环境变量CMD设置为空字符串,然后调用命令git-version。请注意,由于。。。shell确实尝试执行git-version命令,而不是git-with-argument-version命令。只需删除=和之间的空格即可解决此问题。

我不懂你的意思。你能详细说明一下吗。还有,我需要改变什么来修复它。恐怕你只对了一半:-请看我对Sylvain Defrsne的评论。我不明白你的意思。你能详细说明一下吗。还有,我需要改变什么来修复它。恐怕你只对了一半:-请看我对Sylvain Defrsne的评论。不完全正确。他没有将命令分配给变量CMD,请注意等号后面的空格。CMD=git-version$CMD的计算结果很好,但CMD=git-version$他就是这么做的,你说得对!哦!为了我自己的缘故,更正我的答案。不完全正确。他没有将命令分配给变量CMD,请注意等号后面的空格。CMD=git-version$CMD的计算结果很好,但CMD=git-version$他就是这么做的,你说得对!哦!为了我自己的缘故,更正我的答案。我没有看到那个空间。我把问题看得太快了,你明白了。这是空间。对于其他人,是的,我可以使用alias,但这个示例只是一个更大函数的快照。谢谢大家。你说得对。我没有看到那个空间。我把问题看得太快了,你明白了。这是空间。对于其他人,是的,我可以使用alias,但这个示例只是一个更大函数的快照。谢谢大家。请看。请看。