Boolean operators ( &&, -a, ||, -o ) in Bash

后端 未结 2 1369
礼貌的吻别
礼貌的吻别 2020-12-04 08:27

Can someone please explain the difference between the &&, ||, -a, and -o Unix operators?

What are the res

2条回答
  •  难免孤独
    2020-12-04 09:21

    Rule of thumb: Use -a and -o inside square brackets, && and || outside.

    It's important to understand the difference between shell syntax and the syntax of the [ command.

    • && and || are shell operators. They are used to combine the results of two commands. Because they are shell syntax, they have special syntactical significance and cannot be used as arguments to commands.

    • [ is not special syntax. It's actually a command with the name [, also known as test. Since [ is just a regular command, it uses -a and -o for its and and or operators. It can't use && and || because those are shell syntax that commands don't get to see.

    But wait! Bash has a fancier test syntax in the form of [[ ]]. If you use double square brackets, you get access to things like regexes and wildcards. You can also use shell operators like &&, ||, <, and > freely inside the brackets because, unlike [, the double bracketed form is special shell syntax. Bash parses [[ itself so you can write things like [[ $foo == 5 && $bar == 6 ]].

提交回复
热议问题