如何在使用IF语句时将多个命令拆分为一个shell命令?

当命令是if语句的一部分时,如何在shell中的多行中分割命令?

虽然这工作:

 if ! fab --fabfile=.deploy/fabfile.py --forward-agent --disable-known-hosts deploy:$target; then rc=1 fi 

这不工作:

 # does not work: if ! fab --fabfile=.deploy/fabfile.py \ --forward-agent \ --disable-known-hosts deploy:$target; then rc=1 fi 

而不是整个命令执行,我得到:

 ./script.sh: line 73: --forward-agent: command not found 

更重要的是,我对Bash的理解所缺less的东西,将会帮助我理解这一点以及未来的类似问题。

如果在反斜杠之后和换行符之前有空格(空格或制表符),则连续行将失败。 没有这样的空白,你的例子适合我:

 $ cat test.sh if ! fab --fabfile=.deploy/fabfile.py \ --forward-agent \ --disable-known-hosts deploy:$target; then echo failed else echo succeeded fi $ alias fab=true; . ./test.sh succeeded $ alias fab=false; . ./test.sh failed 

对于Windows / Cygwin / etc用户:

确保你的行结尾是标准的Unix行,例如\n (LF)。 有Windows \r\n (CRLF)行结尾将打破它。