有没有人知道在bash测试中执行多个语句的方法?所以,如果我使用:
[[ $Var = 1 ]] && echo "yes-1" || echo "no-1"
Run Code Online (Sandbox Code Playgroud)
然后设置Var=1输出是:yes-1
如果我设置Var=2然后输出是:no-1
这项工作正如我所料.但是,如果我尝试添加另一个语句来执行混合,它不起作用:
[[ $Var = 1 ]] && echo "yes-1";echo "yes-2" || echo "no-1";echo "no-2"
Run Code Online (Sandbox Code Playgroud)
当bash看到命令结束时,这是有道理的; 但是......这不是我想要的.
我已经尝试过分组和演绎和功能,并且已经失败并取得了成功,但我真的只想做的就是将这项工作放在一条线上.有人有主意吗?
che*_*ner 34
简单的命令分组应该工作; 但语法可能有点棘手.
[[ $Var = 1 ]] && { echo "yes-1"; echo "yes-2"; } || { echo "no-1"; echo "no-2"; }
Run Code Online (Sandbox Code Playgroud)
有几点需要注意:
if-then-else如果你做任何更复杂的事情,请听@ tvm关于使用声明的建议.
大括号内的每个命令都需要用分号终止,即使是最后一个.
必须通过两侧的空格将每个支撑与周围文本分开.大括号不会导致单词中断bash,因此"{echo"是单个单词,"{echo"是大括号后跟单词"echo".
tvm*_*tvm 11
考虑使用常规的IF THEN ELSE语句.使用&&和|| 在简单的测试中是合理的,例如:
[[ -z "$PATH" ]] && echo 'Disaster, PATH is empty!' || echo 'Everything ok!'
Run Code Online (Sandbox Code Playgroud)
但是,请考虑以下命令:
true && true && true && false && true || echo 'False!'
False!
Run Code Online (Sandbox Code Playgroud)
要么
true && { echo true; false ; } || { echo false; true ; }
true
false
Run Code Online (Sandbox Code Playgroud)
无论何时返回非零退出状态,都在||之后执行命令 被执行.如您所见,即使命令分组也无济于事.
子shell中的执行行为类似:
true && ( true; echo true; true; false ) || ( true; echo true; false )
true
true
Run Code Online (Sandbox Code Playgroud)
如果您需要正确的IF行为,请使用常规IF.