在fish shell中很难找到条件语法.有没有人有关于如何写一个if,with ands和ors的解释的链接?
特别是我想写
if not $status
do a command
end
Run Code Online (Sandbox Code Playgroud)
在上一个命令返回非成功时执行命令.我怎么做?
请参阅http://fishshell.com/docs/current/commands.html#if和http://fishshell.com/docs/current/tutorial.html#tut_conditionals.
鱼的if结构如下:
if COMMAND
# do something if it succeeded
else
# do something if it failed ($status != 0)
end
Run Code Online (Sandbox Code Playgroud)
然后还有的not,and和or命令,你可以像使用
if not COMMAND1; or COMMAND2
# and so on
Run Code Online (Sandbox Code Playgroud)
如果你真的想测试变量(例如$ status),你需要使用test命令,比如
if test $status -eq 0
Run Code Online (Sandbox Code Playgroud)
请记住每个命令后$ status都会更改,因此如果您需要使用先前命令的状态(在提示中很常见),您需要执行Joachim Pileborg所说的操作,将其保存到另一个变量中.
另外,test引用有一些问题(因为它是遵循POSIX的少数几个部分之一) - 如果在test $foo -eq 0$ foo中未定义,则test将错误输出,如果未定义test -n $foo,则测试将为true(因为POSIX)要求用一个参数测试是真的).
一点题外话,在2.3.0之前版本中的鱼,你需要添加begin和end周围条件and或or因为它是古怪的解释.
所以你必须这样做
如果开始命令; 或COMMAND2; 结束#为status = 0做一些事情