Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 我如何使用&&;用我自己的功能?_Bash - Fatal编程技术网

Bash 我如何使用&&;用我自己的功能?

Bash 我如何使用&&;用我自己的功能?,bash,Bash,运行此命令将打印出两条语句 #!/bin/bash echo "Hello" && echo "World" 但是,运行此命令只打印“Hello” 为什么这不起作用?我如何更改脚本使其起作用?退出值为0表示成功,而其他值表示失败。如果左侧失败(&&运算符返回非零),则不会执行右侧 因此,将return 1更改为return 0return 1(或任何非0的内容)表示false为bash,这意味着第二个命令将不会被调用 使用返回0(这意味着为true),或使用其他操作符(如|或|

运行此命令将打印出两条语句

#!/bin/bash
echo "Hello" && echo "World"
但是,运行此命令只打印“Hello”

为什么这不起作用?我如何更改脚本使其起作用?

退出值为0表示成功,而其他值表示失败。如果左侧失败(&&运算符返回非零),则不会执行右侧

因此,将
return 1
更改为
return 0
return 1
(或任何非0的内容)表示
false
为bash,这意味着第二个命令将不会被调用

使用
返回0
(这意味着
为true
),或使用其他操作符(如
|
|
)链接它们)


如评论中所述,从技术上讲,bash没有布尔值,
&&
|
在手册中不是“布尔短路运算符”,而是“控制运算符”。As
a和&b
表示“当且仅当
a
成功时运行
b
,“成功”定义为零退出代码(命令
true
始终返回0,而
false
返回1),净效果与我上面描述的相同。

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


尝试
返回0

删除
message()
函数中的return语句。

&仅当第一条指令成功时才执行第二条指令,即结果为0

应该有一个徽章,用于触发N个同时相同的答案。由于所有状态下的答案,
bash
使用与您通常的真/假期望值相反的成功/失败值,因为它基于返回码。@Ben我实际上又得到了2个,但它们被删除了:)请参见--
&
|
是控制运算符,不应与布尔短路逻辑运算符混淆。0表示真?我应该猜到:)。谢谢@Rupert不是“真或假”——而是:
a&&b
表示“仅当a成功时运行b”——注意这里没有“真或假”的附件,因为
&
|
类似于布尔短路求值器,但它们不是。它们是“控制运算符”。了解默认返回值的计算结果为true非常有用。但这并不是在所有情况下都有帮助,这不一定是真的<代码>&&和
|
不是布尔短路运算符(因此标准TTL逻辑或名称不适用)。它们是控制运算符,其中
a和&b
表示“仅当a成功时运行b”(不存在“真或假”)——手册中写道:“当且仅当command1返回零退出状态时才执行command2。”@pst:是的,那么命令
true
false
的退出状态是什么
&&
|
在bash中工作,就像布尔快捷操作符一样,如果我们知道“exit code=0表示true,其他任何东西都表示false”。
#!/bin/bash
message() {
  echo "Hello"
  return 1
}
message && echo "World"