Bash: дважды равняется по сравнению с-eq

Используя удар, набор HISTCONTROL="ignorespace" и предшествуйте с пространством любой команде, Вы не хотите быть зарегистрированными в истории. В случае, если Вы забыли принимать любые меры, существует также history -d <number> для удаления определенной записи или history -c для очистки всей истории команд.

48
06.07.2011, 06:54
3 ответа

== a bash- определенный псевдоним для =, который выполняет строку (лексическое) сравнение вместо -eq числовое сравнение. (Это назад от Perl: операторы стиля слова являются числовыми, символьные лексические.)

52
27.01.2020, 19:34
  • 1
    Это означает, что, если обе стороны являются целыми числами, это преобразовывает обе стороны в строки и затем сравнивает их? –  beatgammit 05.07.2011, 20:30
  • 2
    Более точно это наоборот: все - строка, -eq говорит bash интерпретировать строки как целые числа (создание 0 без предупреждения, если строка не является числовой). –  geekosaur 05.07.2011, 20:34
  • 3
    @tjameson Для предоставления примера: [ 01 -eq 1 ] но [ 01 != 1 ]. –  Gilles 'SO- stop being evil' 05.07.2011, 23:54
  • 4
    это, в то время как == как a [ оператор нестандартен и не должен использоваться, это не определенное для удара. Это было представлено ksh и также поддерживается zsh (хотя первое = потребности, которые будут заключены в кавычки), yash и GNU [ утилита (и любые такие утилиты, реализованные как ksh сценарии в некоторых системах), по крайней мере). Разрешение –  Stéphane Chazelas 15.06.2015, 13:52
  • 5
    @geekosaur спасибо я получаю предупреждение от удара v4.3.42, если моя строка не является числовой: $ if [ "hello" -eq 0 ]; then echo true; fi удар: [:здравствуйте: целое выражение ожидало –  Andrew Bainbridge 25.08.2016, 12:23

Если Вы захотите сделать целочисленное сравнение, то Вы будете лучше использовать (()), где можно также использовать> = и т.д.

Пример:

if (( $UID == 0 )); then
   echo "You are root"
else
   echo "You are not root"
fi
7
27.01.2020, 19:34
  • 1
    Или (( UID == 0 )) или (( ! UID )) для этого вопросы. Отметьте это ((...)) нестандартно (a ksh функция, также поддерживавшая bash и zsh с изменениями). –  Stéphane Chazelas 15.06.2015, 14:09

Чтобы уточнить ответ bollovan ...

Не существует оператора сравнения > = или <= для строк. Но вы можете использовать их с арифметической командой ((...)) для сравнения целых чисел.

Вы также можете использовать другие операторы сравнения строк ( == , ! = , <, > , но не = ) для сравнения целых чисел, если вы используете их внутри ((...)) .

Примеры

  • И [[01 -eq 1]] , и ((01 == 1)) выполняют целочисленные сравнения. Оба верны.
  • Оба [[01 == 1]] и [01 = 1] выполняют сравнение строк. Оба они ложны.
  • И ((01 -eq 1)) , и ((01 = 1)) вернут ошибку.

Примечание: синтаксис двойных скобок [[...]] и синтаксис двойных скобок ((...)) поддерживаются не всеми оболочками.

13
27.01.2020, 19:34

Теги

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