Цепные команды Fish через `&&` или `||`

94

В Bash / ZSH и других оболочках я привык использовать &&и ||.

Есть ли эквивалент в рыбе?

Альберт
источник
Этот синтаксис теперь поддерживается на главной ветви и будет выпущен в Fish 3.0 ( github.com/fish-shell/fish-shell/commit/... )
Воинственный Шимпанзе

Ответы:

13

Логические операторы, к которым вы привыкли, поддерживаются начиная с fish 3.0.0, выпущенного 2018-12-28.

Из примечаний к выпуску v3 :

  • fish теперь поддерживает &&(like and), ||(like or) и !(like not) для лучшей миграции из POSIX-совместимых оболочек ( # 4620 ).
Деннис
источник
132

У Fish нет специального синтаксиса для логического И ( &&) или логического ИЛИ ( ||).

Вместо этого вы можете использовать команды andи or, которые проверяют состояние выхода предыдущей команды и действуют соответственно:

command1
and command2
command1
or command2

Кроме того, как и в bash, вы можете использовать точку ;с запятой для выполнения двух команд одна за другой:

command1 ; command2

Это позволяет использовать более знакомый синтаксис:

command1 ;and command2
command1 ;or command2

См. Http://fishshell.com/docs/current/tutorial.html#tut_combiners

Деннис
источник
4
Существует открытая проблема github для добавления поддержки этого синтаксиса: && не работает · Проблема № 150 · fish-shell / fish-shell
aboy021
20
This allows using a more familiar syntax:очень субъективно
Петр Пеллер
1
;andменее читабелен, чем &&точка с запятой, которая предполагает логически непересекающуюся операцию. Это визуально сотрясает.
Воинственный шимпанзе
@ Эллиотт Я согласен, но Фиш не дает тебе выбора.
Деннис
1
Обратите внимание, что в оболочках рыбы и борна операторы AND и OR имеют одинаковый порядок, в отличие от языков на основе C: unix.stackexchange.com/a/88851/50703
balupton