如何扩展 bash 中的命令,使其根据选项进行扩展?

如何扩展 bash 中的命令,使其根据选项进行扩展?

我已经开始使用 git 存储库,其中包含大量应假定为只读的内容。所以,每次我抛出一个新分支时:

git checkout -b newBranch

它后面应该跟着命令

git update-index --assume-unchanged LARGE_READONLY_DIRECTORY

我认为这将是一个绝佳的机会来尝试我刚刚起步的 bash 技能,因此我在 shell 中需要做的就是第一行,它会执行第一行,然后是第二行,而我不记得这样做(我赢了) 't)。

我想我想要做的是在 .bashrc 中有一个函数来检查第一个参数是否为“checkout”,第二个参数是否为“-b”。第一次检查很简单,但我不知道如何注意到 -b 的存在。

git() {
    if [[ $1 == 'checkout' ]] && [[$2 == '-b']]; 
            then echo 'yep!';
    fi;

    command git "$@";
}

当我执行此操作时,它抱怨[[-b: command not found.据推测,这是一个选项,而不是一个论点,这一事实在这里很重要。谁能告诉我如何检查该参数是否存在,以便我知道执行后续命令?

答案1

[[和之间需要有一个空格$2

因为 bash[[不是语法,它是一个内置命令(或者准确地说是关键字)。 Bash 将[[使用其所有参数执行,包括结束]].当[[和之间没有空格时, $2bash 将看不到关键字[[,而是会看到这个东西:([[-b扩展$2为后-b)。然后,Bash 将尝试将该字符串[[-b作为命令执行,但会失败。请参阅help [[获取更多信息。

出于同样的原因,您在结束前也需要一个空格]]

这是您的固定代码:

git() {
    if [[ $1 == 'checkout' ]] && [[ $2 == '-b' ]]; 
            then echo 'yep!';
    fi;

    command git "$@";
}

另请参阅bash 陷阱bash 常见问题解答。 IMO 学习 bash 脚本的最佳方法...或者学习不做太多 bash 脚本的最佳方法。

答案2

[[由于和之间没有空格$2,因此解析不正确([[直接跟随 的扩展$2)。您需要在参数之间留有空格[[

[[ $2 == -b ]]

相关内容