Логическое И в сценарии bash

Да, они называются "правилами окна", и большинство популярных оконных менеджеров (Compiz, Kwin, Xfwm и т.д.) реализуют их в той или иной форме.

Compiz требует установки неофициального пакета "compiz plugins", KWin включает их в стандартную установку, а Xfwm устанавливает их в конфигурационном файле.

0
04.06.2019, 21:00
2 ответа

Я не могу воспроизвести ошибку в bashс учетом вашего кода. С заданными значениями код не достиг бы leap=0, так как $iyrи $leapbне равны.

Однако, если я изменю его следующим образом:

if [ $leapb -eq $iyr ] && [ $leapc -ne $iyr ]; then
    leap=0
fi

, тогда это даст

[: -eq: unary operator expected

, если $leapb— пустая строка.

Однако с синтаксисом [[... ]]тест завершится без ошибок.

Похожие материалы:

0
28.01.2020, 02:40

С упрощенной версией вашего кода:

[[ $a -eq $b ]]

Нет ошибки ни для одного значения aи b, даже для строк, пустых или неустановленных.

Более старой версией [[является [, но даже это правильно процитировано:

[ "$a" -eq "$b" ]

Только если значение внутри aили bявляется строкой (или пусто/не установлено):

./script: line 13: [: StringInsideA: integer expression expected

Это означает, что реальный код, который вы тестируете, использует как [, так и , а не цитирование расширений переменных (плохая идея):

[ $a -eq $b ]

В этом случае, если aпусто/не установлено, а bимеет некоторое значение (или наоборот ), сообщение об ошибке будет:

./script: line 14: [: -eq: unary operator expected

Заключение :пожалуйста, используйте [[версию теста (в bash,ksh,zsh ).

логика

Для значений, о которых вы сообщаете:

Поймите, что если leapb=1900и iyr=1979(, то есть , не равны ), первый тест завершится неудачно, и leap=0никогда не будет выполнен, независимо от значения leapc.

Единственный способ выполнить leap=0состоит в том, что leapb=iyr, а затем leapcравно , а не , равному iyr.

проще

Если все, что вы хотите сделать, это определить, когда год високосный, используйте это:

leap=$(( y>0 && ( y%4==0 && y%100>0 || y%400==0 ) ))

В этой формуле високосный год будет равен 1 для високосных лет и 0 в противном случае.

1
28.01.2020, 02:40

Теги

Похожие вопросы