如果bash中的statment包含多个组?
我想要的是如果bash中的statment包含多个组?,bash,travis-ci,Bash,Travis Ci,我想要的是 if((TRAVIS_BRANCH != "master") || (TRAVIS_BRANCH == "master" && TRAVIS_PULL_REQUEST == true) 在bash中如何执行此操作?我认为这是最接近的,但它仍然不起作用 if [ "$TRAVIS_BRANCH" != "master" ] || ["$TRAVIS_BRANCH" == "master" && "$TRAVIS_PULL_REQUEST" == "t
if((TRAVIS_BRANCH != "master") || (TRAVIS_BRANCH == "master" && TRAVIS_PULL_REQUEST == true)
在bash中如何执行此操作?我认为这是最接近的,但它仍然不起作用
if [ "$TRAVIS_BRANCH" != "master" ] || ["$TRAVIS_BRANCH" == "master" && "$TRAVIS_PULL_REQUEST" == "true"]
在命令名周围加空格(
[
是命令名),不要试图在单个[
命令中使用&&
或|
if [ "$TRAVIS_BRANCH" != "master" ] || { [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_PULL_REQUEST" = "true"]; }
但是,您可以在[[]]
的内部使用&&
或|
,也不需要在此处引用:
if [[ $TRAVIS_BRANCH != master ]] || [[ $TRAVIS_BRANCH = master && $TRAVIS_PULL_REQUEST = true ]]
尝试:
- 确保
和[
字符周围有空格]
- Double equals在Bash中工作,但与POSIX不兼容
- 您必须在
[
- 由于是外壳代码,建议不要在每行代码中使用多个布尔运算符
- 建议在Bash中使用
而不是[[
[
is_master_pull_request() {
[[ "$TRAVIS_BRANCH" = "master" ]] && [[ "$TRAVIS_PULL_REQUEST" = "true" ]]
}
if [[ "$TRAVIS_BRANCH" != "master" ]] || is_master_pull_request
无法正常工作?看起来您至少有一个语法错误。当第一次检查
[“$TRAVIS_BRANCH”!=“master”]
失败时,猜猜看“$TRAVIS_BRANCH”会发生什么
将是:您不需要在第二次检查中检查它。是的,这将起作用。出于[[]]
内部的风格原因,我更喜欢=
(因为它是兼容POSIX的运营商),但==
是完全允许的。POSIX出于正当理由不推荐使用-a
语法。请参阅--您会注意到,所有带有4个或更多参数的test
(您的参数有7个)的使用都会产生标准未指定的结果。(参数如(
和)
在此上下文中可能被解析为分组运算符而不是数据,从而导致不明确的情况)。
is_master_pull_request() {
[[ "$TRAVIS_BRANCH" = "master" ]] && [[ "$TRAVIS_PULL_REQUEST" = "true" ]]
}
if [[ "$TRAVIS_BRANCH" != "master" ]] || is_master_pull_request