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
Git bash正在尝试执行我的变量名wth_Git_Bash_Github - Fatal编程技术网

Git bash正在尝试执行我的变量名wth

Git bash正在尝试执行我的变量名wth,git,bash,github,Git,Bash,Github,我编写了这个脚本,以帮助我的团队将Git提交到远程服务器上的集成分支中。不用说,我的bash脚本有点欠缺 首先,这里是脚本: #!/usr/bin/env bash FEATURE_BRANCH_NAME="$1" && if [ -z "$1" ]; then echo "You did not specify a branch name." exit 1; fi if [${1} == "--force"

我编写了这个脚本,以帮助我的团队将Git提交到远程服务器上的集成分支中。不用说,我的bash脚本有点欠缺

首先,这里是脚本:

    #!/usr/bin/env bash

    FEATURE_BRANCH_NAME="$1" &&


    if [ -z "$1" ]; then
      echo "You did not specify a branch name."
      exit 1;
    fi

    if [${1} == "--force"]; then     # the problem seems to happen here!
      echo "You did not specify a branch name."
      exit 1;
    fi

    if [ "$2" != "--force" ]; then
      echo "Are you sure you want to squash commits for branch name = $FEATURE_BRANCH_NAME? If so use --force."
      exit 1;
    fi



    git fetch origin &&
    git checkout -b temp_branch origin/integration &&
    git merge -Xtheirs --squash -m "squashed with branch=$FEATURE_BRANCH_NAME" $FEATURE_BRANCH_NAME &&
    git checkout $FEATURE_BRANCH_NAME &&
    git merge temp_branch &&
    git push origin $FEATURE_BRANCH_NAME


    #end
我看到的问题是,如果我像这样执行上述脚本:

./script.sh $(git rev-parse --abbrev-ref HEAD)
然后bash尝试实际执行由值
$(git rev parse--abbrev ref HEAD)
(当前分支名称)表示的命令

换句话说,如果
$(git rev parse--abbrev ref HEAD)的输出是“xyz_branch”
,那么bash将尝试运行$xyz_branch,bash将抛出:

[xyz_branch: command not found

在in脚本的上方有一条注释#,它指定了这发生在哪一行。到底发生了什么事?

问题是您缺少一个空格:

if [ ${1} == "--force" ];
    ^                 ^ (second error)
此外,您可能打算使用
=
而不是
=


bash中的
if
构造具有如下语法:

if command; ...
命令的结果告诉
if
是执行if部分还是执行else部分。现在,
[
是另一个命令(也称为
test

因此,在bash中,如果您编写:

$ [ a = b ]
这实际上是用参数
a
=
b
]
调用的程序
[
(该程序可以由bash内部处理,即使您实际上有一个名为
[
的可执行文件)

回顾您的问题,您正在尝试执行:

$ [${1} == "--force"]
这是程序
[${1}
,带有参数
==
--force]
。显然不是你想要的


这里还需要注意一些其他事项。首先,最好引用
“${1}”
,因为如果它有空格或是空的,正如您可能想象的那样,它将创建一个不正确的
[
参数列表

另一个是,您不必总是在
if
while
等上下文中使用
[
。例如,您可以利用逻辑运算的类C短路特性:

$ [ "$a" = "$b" ] && echo My variables are equal

问题是您在此处缺少一个空格:

if [ ${1} == "--force" ];
    ^                 ^ (second error)
此外,您可能打算使用
=
而不是
=


bash中的
if
构造具有如下语法:

if command; ...
command
的结果告诉
if
是执行if部分还是else部分。现在
[
是另一个命令(也称为
test

因此,在bash中,如果您编写:

$ [ a = b ]
这实际上是用参数
a
=
b
]
调用的程序
[
(该程序可以由bash内部处理,即使您实际上有一个名为
[
的可执行文件)

回顾您的问题,您正在尝试执行:

$ [${1} == "--force"]
这是程序
[${1}
,带有参数
==
--force]
。显然不是你想要的


这里还需要注意一些其他事项。首先,最好引用
“${1}”
,因为如果它有空格或是空的,正如您可能想象的那样,它将创建一个不正确的
[
参数列表

另一个是,您不必总是在
if
while
等上下文中使用
[
。例如,您可以利用逻辑运算的类C短路特性:

$ [ "$a" = "$b" ] && echo My variables are equal

你在
[
${1}
之间缺少了一个空格。你是你的朋友吗……就如何看待它而言:
[
是一个命令。实际上有一个
/usr/bin/[
(或者
/bin/[
,取决于你的操作系统)在磁盘上,尽管出于性能原因,大多数shell也提供内置版本。因此,与任何其他命令一样,命令名与其参数之间需要空格。不能运行
lsmydir/
而不是
ls mydir/
[
@CharlesDuffy真棒的工具!你在
[
${1}
之间缺少了一个空格。你是你的朋友吗……就如何看待它而言:
[
是一个命令。实际上有一个
/usr/bin/[
(或者
/bin/[/code>,取决于你的操作系统)在磁盘上,尽管出于性能原因,大多数shell也提供内置版本。因此,与任何其他命令一样,命令名与其参数之间需要空格。不能运行
lsmydir/
而不是
ls mydir/
[
@CharlesDuffy awesome tool!同样在
]前面的末尾。
。请引用参数展开式。(旁白:您建议使用
=
而不是
=
,这是完全正确的,因为
=
是一个bash/ksh扩展,不保证可移植,而
=
是POSIX定义的。感谢您指出这一点——这是一个太多人忽视的项目)。同样在
之前的结尾处)
。请引用参数扩展。(旁白:您建议使用
=
而不是
=
,这是完全正确的,因为
=
是bash/ksh扩展,不保证可移植,而
=
是POSIX定义的。感谢您指出这一点——这是一个太多人忽视的项目)。