2011-06-07 80 views
3

运行此打印出两个语句如何使用&&与我自己的功能?

#!/bin/bash 
echo "Hello" && echo "World" 

然而,运行此只打印出“你好”

#!/bin/bash 
message() { 
    echo "Hello" 
    return 1 
} 
message && echo "World" 

为什么不这项工作,我怎样才能改变我的脚本,它呢?

+4

应该有用于触发n个联立相同的答案徽章。 – 2011-06-07 22:56:44

+2

由于答案低于所有状态,因为根据返回代码,'bash'将成功/失败的相反值用于通常的真/假预期。 – Orbling 2011-06-07 22:58:03

+0

@Ben我实际上有2个,但他们被删除:) – 2011-06-07 23:03:19

回答

7

“退出”值为0意味着成功,而其他意味着失败。如果左侧失败& &经营者不执行右手边(即如果它返回非零)

因此改变return 1return 0

+0

0是真的?我应该猜到了:)。谢谢! – 2011-06-07 23:00:48

+0

@Rupert不是“true或false” - 而是:'a && b'表示“仅在成功时运行b” - 注意这里没有附加“true或false”,因为'&&'和'| |'类似于布尔短路评估器,它们不是。他们是“控制操作员”。 – 2011-06-07 23:31:18

5

return 1(或其他任何这是不是0)表示false为bash,表示第二个命令不会被调用。

使用return 0(这意味着true),或者他们使用其他运营商(如||;。)

正如评论中提到链条,技术上的bash没有布尔值,并&&||是在手册中没有描述为“布尔短路操作符”,而是“控制操作符”。由于a && b的意思是“当且仅当a成功时运行b”,并且“成功”被定义为零退出代码(并且命令true总是返回0,而false返回1),所以净效果与我描述的相同以上。

+0

这不一定是正确的。 '&&'和'||'不是布尔短路操作符(因此标准的TTL逻辑或名称不适用)。它们是控制操作符,其中'a && b'表示“只有成功时才运行b”(不存在“真或假”) - 从手册:“command2在命令1返回退出状态时执行为零“。 – 2011-06-07 23:34:05

+0

@pst:是的,命令'true'和'false'的退出状态是什么?如果我们知道“退出代码= 0意味着真,其他意味着假”,那么'&&'和'||'在bash中就像布尔快捷运算符一样工作。 – 2011-06-07 23:58:08

5

在bash中,返回值为1表示错误。

尝试return 0

1

message()功能删除return语句。

+0

知道默认返回值为真是非常有用,所以谢谢。尽管如此,这在所有情况下都无济于事。 – 2011-06-07 23:05:06

4

& &执行第二指令只有当第一个是成功的,即具有0结果

相关问题