Ответ 1
Правило большого пальца: Используйте -a
и -o
внутри квадратных скобок, &&
и ||
снаружи.
Важно понимать разницу между синтаксисом оболочки и синтаксисом команды [
.
-
&&
и||
- операторы оболочки. Они используются для объединения результатов двух команд. Поскольку они являются синтаксисом оболочки, они имеют особое синтаксическое значение и не могут использоваться в качестве аргументов для команд. -
[
не является специальным синтаксисом. Это фактически команда с именем[
, также известное какtest
. Поскольку[
является просто регулярной командой, она использует-a
и-o
для своих и/или операторов. Он не может использовать&&
и||
, потому что это синтаксис оболочки, который команды не видят.
Но подождите! Bash имеет синтаксис синтаксического анализа в форме [[ ]]
. Если вы используете двойные квадратные скобки, вы получаете доступ к вещам типа регулярных выражений и подстановочных знаков. Вы также можете использовать операторы оболочки, такие как &&
, ||
, <
и >
свободно внутри скобок, потому что, в отличие от [
, двойная скобка представляет собой специальный синтаксис оболочки. Bash анализирует [[
, поэтому вы можете писать такие вещи, как [[ $foo == 5 && $bar == 6 ]]
.