如何在bash中构build一个条件赋值?
我正在寻找一种方法来在bash中构build条件赋值:
在Java中,它看起来像这样:
int variable= (condition) ? 1 : 0; 根据乔纳森的评论:
 variable=$(( 1 == 1 ? 1 : 0 )) 
编辑:
 我修改了原来的回答,只是echo了条件操作符的值,实际上并没有显示任何赋值。 
如果您想要在shell脚本中定义默认值,请使用如下所示的代码:
 : ${VAR:="default"} 
是的,这行以':'开始。 我在shell脚本中使用这个,所以我可以在ENV中覆盖variables,或使用默认值。
这是相关的,因为这是我最常用的那种逻辑。 ]
 myvar="default" && [[ <some_condition_is_true> ]] && myvar="non-default" 
实例:
 DELIM="" && [[ "$APP_ENV_RESOLVED" != "" ]] && DELIM=$INNER_DELIM 
条件也可以是“((…))”:
 filepath=/proc/drbd && (( $# > 0 )) && filepath=$1 
大到@Demosthenex,尤其是@Dennis Williamson,这是我见过的最简单,最简单的解决scheme。 让它为了简单的三元赋值而需要一堆括号 。 六十年代啊 ! 并把它放在一个例子中…
 echo $BASHRULES; # not defined # no output : ${BASHRULES:="SCHOOL"} # assign the variable echo $BASHRULES # check it SCHOOL # correct answer : ${BASHRULES="FOREVER?"} # notice the slightly different syntax for the conditional assignment echo $BASHRULES # let's see what happened! SCHOOL # unchanged! (it was already defined) 
我很久以前写过这些日子了。这些日子里,我可能会对像…
 PLATFORM=iphonesimulator OTHERSDK=iphone && [[ $PLATFORM=~os ]] \ && OTHERSDK+=simulator \ || OTHERSDK+=os 
$OTHERSDKiphoneos
我想用string做一个有条件的分配,最后我得到:
 SOWHAT=$([ "$MYVALUE" = "value" ] && echo "YES" || echo "NO") 
除了其他更一般的答案(特别是根据乔纳森的评论和凯文的更一般的答案 [也支持string]),我想添加以下两个解决scheme:
 根据条件将variables设置为0或1 : 
(如问题的例子所示)。
一般forms将阅读
 (condition); variable=$?; 
  $variable结果是0或1 , condition可以是任何有效的条件expression式 。 
例如检查variables…
 [[ $variableToCheck == "$othervariable, string or number to match" ]] variable=$? 
…或检查文件的存在…
 [ -f "$filepath" ] fileExists=$? 
  …或检查$myNumber的数字值: 
 (( myNumber >= 1000000000 )) is_huge_number=$? 
这个解决scheme的优点是
-  它支持任意的条件expression式 ,包括string 
 (在Jonathan 解决scheme的 算术expression式中不支持)
-  那个variable在任何情况下都被声明 ,不像griffon的答案 :
 [ -z "$variable" ] && variable="defaultValue"
 如果你想稍后进行名称引用 (例如在一个函数中),这将会很重要。
  请注意:在Bash中,特殊variables$? 始终包含之前执行的语句(或语句块;请参阅man bash了解更多详细信息)的退出代码。 因此,一个积极的结果通常用0代表,而不是1 (见下面的评论,感谢Assimilater 指出 )。 
 因此,如果条件为真(例如[[2 eq 2]] ),那么$?=0 。 如果您的variables需要0或1(例如打印或进行math计算),那么您需要使用Jonathan的解决scheme variable=$(( 1 == 1 ? 1 : 0 )) ,或者 – 如果您想避免创build一个子shell或者有任意的条件 – 下面的解决scheme。 
设置variables为任意值:
就像大多数其他答案中所做的那样,它可以进行如下调整:
 (condition) \ && variable=true \ || variable=false 
如在
 [[ $variableToCheck == "$othervariable, string or number to match" ]] \ && variable="$valueIfTrue" \ || variable="$valueIfFalse" 
或在正面检查中获得1,在失败时为0(如问题示例中所示):
 [[ $variableToCheck == "$othervariable, string or number to match" ]] \ && variable=1 \ || variable=0 
这个解决scheme的优点是
-  这可能会被认为比凯文的答案 更好一些 
 myvar="default" && [[ <some_condition_is_true> ]] && myvar="non-default",以及
-   $valueIfTrue仅在需要$valueIfTrue进行条件评估 ,
 如果你想做点什么,这很重要-  与副作用一样
-   variable=$((i++))或者
-  { variable=$1; shift; }
 
-   
-  高计算,就像
-  variable=$(find / -type f -name ListOfFilesWithThisNameOnMySystem)
 
-  
 
-  与副作用一样
-  比ghostdog74的回答 短一点 
 (如果你有多个条件,这很好!)
- 没有像皮埃尔的回答那样打开一个子壳
-  和上面一样:
-  它支持任意的条件expression式 ,包括string 
 (在Jonathan 解决scheme的 算术expression式中不支持)
-  那个variable在任何情况下都被声明 ,不像griffon的答案 :
 [ -z "$variable" ] && variable="defaultValue"
 如果你想稍后进行名称引用 (例如在一个函数中),这将会很重要。
 
-  它支持任意的条件expression式 ,包括string 
如果你想分配一个值,除非variables是空的使用这个:
 [ -z "$variable" ] && variable="defaultValue" 
 你也可以把对方的条件放在[] 
其他方式
 case "$variable" in condition ) result=1;; *) result=0;; esac