Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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,我知道操作符&&和|在Bash中做什么 但最近我在一个shell脚本中遇到了以下情况: [[ test1 ]] && { test2 } || : 我不明白上面语句中的|:(逻辑或后跟:)是什么意思 谁能详细说明一下吗?一步一个脚印: :是一个shell内置程序,基本上相当于true命令。如果你感兴趣,这里有一个很好的描述它的历史和它是如何工作的 [[test1]]测试是否存在test1。(通常,这是一个变量。) {test2}在当前shell环境中执行test2。(通常,这

我知道操作符
&&
|
在Bash中做什么

但最近我在一个shell脚本中遇到了以下情况:

[[ test1 ]] && { test2 } || :
我不明白上面语句中的
|:
(逻辑或后跟
)是什么意思


谁能详细说明一下吗?

一步一个脚印

  • 是一个shell内置程序,基本上相当于
    true
    命令。如果你感兴趣,这里有一个很好的描述它的历史和它是如何工作的

  • [[test1]]
    测试是否存在
    test1
    。(通常,这是一个变量。)

  • {test2}
    在当前shell环境中执行
    test2
    。(通常,这是以换行符或分号结尾的命令列表。)

  • &&
    的优先级高于
    |
    。因此,
    [[test1]]和&&{test2}
    将在
    |
    之前进行评估

将所有这些放在一起

[[ test1 ]] && { test2 } || :
指:

  • 如果存在
    test1
    ,则执行
    test2
  • 如果
    test1
    不存在,或者
    test2
    失败,则返回
    true
    (即:
    $?==0
需要注意的事项

  • 返回的退出代码(
    $?
    )与“不返回错误”不同!如果
    test2
    失败,您可能仍然会在脚本输出中看到错误,但整个命令的退出代码将始终为
    true

  • 如果在
    set-e
    下执行脚本,则执行
    test2时出错将不会终止脚本


  • cmd | |:
    是一种忽略由
    cmd
    引起的错误的方法。如果使用
    set-e
    执行脚本,并且您不希望在
    cmd
    失败时脚本被中断,则此选项非常有用。

    ,因此
    command | |:
    只是一种“忽略”可能失败的
    命令的方法。特别适用于
    set-e