我想知道关于 if/then/else 的最佳实践是什么;我倾向于使用以下表格(因为我觉得它更容易阅读)
#!/usr/bin/ksh
#
[[ -f /path/to/target/file ]] && {
echo "File exists"
} || {
echo "No such file"
}
Run Code Online (Sandbox Code Playgroud)
而不是这种形式
#!/usr/bin/ksh
#
if [ -f /path/to/target/file ] ; then
echo "File exists"
else
echo "No such file"
fi
Run Code Online (Sandbox Code Playgroud)
我还在复杂块true
之前包含了一个语句} || {
,以确保不会执行“else”部分。
你有什么建议?
这种风格的问题在于这两种形式并不等价。当您使用:
if command; then
foo
else
bar
fi
Run Code Online (Sandbox Code Playgroud)
然后要么foo
或bar
将被调用,永远不会两者都被调用。当同时使用&&
and 时||
,可以采用两条路径:
$ [[ -d / ]] && {
> echo "Path 1 taken"
> false
> } || {
> echo "Path 2 taken"
> }
Path 1 taken
Path 2 taken
$
Run Code Online (Sandbox Code Playgroud)
使用if cmd; then foo; else bar; fi
表单时,bar
被调用的条件是cmd
返回false。使用cmd && foo || bar
表单时,bar
被调用的条件是cmd && foo
返回false。
编辑:我刚刚注意到,在您的问题中,您承认您需要放在true
块的末尾才能使您的版本完全正常工作。如果您愿意这样做,我不知道任何其他主要问题 - 但我认为一种风格要求您无条件地添加“true”作为块中的最后一个命令,如果有任何可能性之前的命令可能会失败,只是保证您最终会忘记它,并且事情看起来好像它们在正常工作,直到它们没有。