我努力了
#!/bin/bash
distro=""
myvar1=[[ -n "$distro" ]] && echo $distro || echo "debian"
myvar2=$((-n $distro ? $distro : "debian"))
这些是脚本的结果
./build.sh: line 5: -n: command not found
debian
./build.sh: line 6: -n ? : debian: expression expected (error token is ": debian")
与往常一样,
A && B || C
不是一个合适的三元运算符,因为它运行C
ifA
is false或 ifB
is false。 这真的应该从你的词汇表中消失。你要:
或者
if A; then B; else C; fi
如果您需要它在一行上。就你的情况而言:
C 风格算术表达式中有一个三元运算符,但它仅用于算术,因此仅适用于数字(在的情况下
bash
,甚至仅限于十进制整数)。你可以做:
但不将字符串分配给
myvar
。不过,这里有来自 Bourne shell(自 70 年代末开始)的专用操作符,就是用于这个目的:
如果未设置或为空,则扩展
${distro:-debian}
为。debian
$distro
或者
如果未设置或为空,则Where 的
${distro:=debian}
工作方式与 and 类似${distro:-debian}
,并且还会分配debian
给。请注意,扩展名需要用引号引起来,因为它现在是列表上下文。$distro
$distro
:
请注意,没有unset的变体仅代表unset 或 empty。