是否有类似于以下表达式的“内联等效项”?:
if [[ $VERBOSE == 1 ]]; then
V=$FOO
else
V=
fi
Run Code Online (Sandbox Code Playgroud)
我在想这样的事情perl
,例如:
$V = $VERBOSE ? $FOO : undef;
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,我的兴趣并不是将五行减为一行,因为人们总是可以将 shell 代码段重写为
if [[ $VERBOSE == 1 ]]; then V=$FOO; else V=; fi
Run Code Online (Sandbox Code Playgroud)
而是在一个等价于多语句结构的条件表达式中if
。)
如果有区别,我主要对 的答案感兴趣zsh
,但也对 的答案感兴趣bash
。
好吧,我能想到的最接近的是
[[ $VERBOSE == 1 ]] && V="YES" || V="NO"
Run Code Online (Sandbox Code Playgroud)
例如:
$ VERBOSE=0
$ [[ $VERBOSE == 1 ]] && V="YES" || V="NO"; echo $V
NO
$ VERBOSE=1
$ [[ $VERBOSE == 1 ]] && V="YES" || V="NO"; echo $V
YES
Run Code Online (Sandbox Code Playgroud)
以上适用于 bash 和 zsh(以及大多数其他 shell)。
zsh 是 zsh,有一种神秘的方式:
V=${${VERBOSE#0}:+$FOO}
Run Code Online (Sandbox Code Playgroud)
这将设置V
为FOO
if的值VERBOSE
是一个非零数字,并设置为空字符串 ifVERBOSE
为空或0
。
V=${${${VERBOSE/#/a}:#a1}:+foo}
Run Code Online (Sandbox Code Playgroud)
这设置V
为FOO
if的值VERBOSE
是确切的字符串1
,否则设置为空字符串。
现在忘记这一点,并使用if
或的清晰语法case
。
如果FOO
是数字,则可以?:
在算术表达式中使用运算符。else 情况也必须是数字。
((V = VERBOSE ? FOO : 0))
Run Code Online (Sandbox Code Playgroud)