# delete git branch
git--() {
BRANCH=$1
if [ -n $BRANCH]; then
BRANCH=$(git rev-parse --abbrev-ref HEAD)
fi
if [ "$BRANCH" = 'master' || "$BRANCH" = 'develop' ]; then
red "You should not delete $BRANCH"
return 0
fi
}
Run Code Online (Sandbox Code Playgroud)
失败了
git--:[:8: ']' expected
zsh: master: command not found...
git--:8: command not found: master
No branch specified therefore I'm using the current one: master
On branch master
nothing to commit, working tree clean
Do you really want to delete the branch master (y/n)?
Run Code Online (Sandbox Code Playgroud)
但是如果我改变
if [ "$BRANCH" = 'master' || "$BRANCH" = '开发']; 然后
到
if [ "$BRANCH" = 'master' ]; 然后
一切正常。如何进行 OR 比较?
谢谢!
您有两个主要选择(当然也有一些不太直接的选择)
使用zsh语法并使用[[ ... ]]而不是[ ... ].
if [[ "$BRANCH" = 'master' || "$BRANCH" = 'develop' ]]; then
Run Code Online (Sandbox Code Playgroud)使用-o而不是||为了保持 POSIX 兼容
if [ "$BRANCH" = 'master' -o "$BRANCH" = 'develop' ]; then
Run Code Online (Sandbox Code Playgroud)如果代码只能使用 运行zsh,我建议使用 1。
错误消息的原因是这[只是一个常规命令,而不是zsh语法的一部分。[期望]作为最后一个参数,但||它是语法的一部分zsh并且具有优先级。它充当命令之间的分隔符,并将“条件”拆分为两个命令
[ "$BRANCH = 'master'
Run Code Online (Sandbox Code Playgroud)
和
"$BRANCH" = 'develop' ]
Run Code Online (Sandbox Code Playgroud)
如果第一个命令失败,则运行第二个命令。
]运行第一个命令失败,因为缺少结束语。这会导致错误消息:
git--:[:8: ']' expected
Run Code Online (Sandbox Code Playgroud)
第二个命令"$BRANCH"被值替换master。由于没有名为此命令的命令,master因此会返回错误消息
zsh: master: command not found...
Run Code Online (Sandbox Code Playgroud)