Ternary operator in Bash
The ternary operator is a form of syntactic sugar for an in-line if/else statement. Many languages natively support the operator:
JavaScript:
1const color = 'blue';
2console.log(color === 'blue' ? '๐ฆ' : '๐ฉ');
3// Output: ๐ฆ
Python:
1color = "blue"
2print("๐ฆ" if color == "blue" else "๐ฉ")
3# Output: ๐ฆC:
1#include <stdio.h>
2#include <string.h>
3
4int main()
5{
6 char color[4] = "blue";
7 printf("%s", (strcmp(color, "blue") == 0) ? "๐ฆ" : "๐ฉ");
8}
9// Output: ๐ฆ
Ternary Operation
Bash does not have a native ternary operator. Instead, the same functionality can be achieved using:
1color="blue"
2[[ "$color" == "blue" ]] && echo "๐ฆ" || echo "๐ฉ"
3# Output: ๐ฆ[[ "$color" == "blue" ]] has an exit status of 0, so it evaluates the right expression of the && and echoes the blue emoji.
Similarly, if color="green", the [[ "$color" == "blue" ]] expression would have a nonzero exit status, so it evaluates the next logical statement (||) and echos the green emoji.
Saving to a variable
1color="blue"
2emoji=$([[ "$color" == "blue" ]] && echo "๐ฆ" || echo "๐ฉ")
3echo $emoji
4# Output: ๐ฆโ ๏ธ Caution
If the right-hand side of the && condition has a nonzero exit status, it will silently default to the or (||) expression.
[[ cond ]] && op1 || op2 โ op2 will be selected if op1 fails.
Takeaway: Be mindful of the op1 operation. Ensure it exits with a 0 status code, or you may receive a false negative.