Как сравнить 2 строки в регулярном сценарии оболочки? [Дубликат]

Эта ошибка означает, что вы пытаетесь загрузить файл класса «Java», который был скомпилирован с более новой версией Java, чем вы установили.

Например, ваш файл .class мог быть скомпилирован для JDK 7, и вы пытаетесь запустить его с помощью JDK 6.

Таким образом, решение будет либо:

  • Обновите свою рабочую среду Java или
  • Перекомпилируйте класс, если у вас есть источник, используя локальный компилятор Java (если он у вас есть). javac FileName.java

Для разработчиков это может произойти, если другой разработчик проверяет файл .class, и у них есть более новая версия java, чем у вас есть.

115
задан the Tin Man 5 May 2015 в 21:07
поделиться

7 ответов

-eq - оператор сравнения оболочки для сравнения целых чисел. Для сравнения строк вам необходимо использовать =.

4
ответ дан codaddict 21 August 2018 в 13:19
поделиться
  • 1
    -1: Не использовать ==. Он действителен только в ограниченном наборе оболочек и будет производить неуказанное поведение. – William Pursell 1 June 2012 в 15:11

У меня была такая же проблема, сделайте это

if [ 'xyz' = 'abc' ];
then
echo "match"
fi

Обратите внимание на пробелы. Важно, чтобы вы использовали пробелы в этом случае после и перед знаком =.

Проверьте « Другие операторы сравнения ».

12
ответ дан Dunatotatos 21 August 2018 в 13:19
поделиться
  • 1
    в файле Dockerfile: / bin / sh: 1: [: =: неожиданный оператор – holms 12 April 2017 в 23:35

-eq используется для сравнения целых чисел. Вместо этого используйте =.

51
ответ дан Piotr Praszmo 21 August 2018 в 13:19
поделиться
  • 1
    И обратите внимание, чтобы не использовать двойной эквивалент «==». – Rodrigo Caballero 18 July 2018 в 14:16

eq используется для сравнения целых чисел, используя вместо этого равный '=', например:

if [ 'AAA' = 'ABC' ];
then 
    echo "the same" 
else 
    echo "not the same"
fi

удачи

10
ответ дан Qign20 21 August 2018 в 13:19
поделиться

-eq - оператор математического сравнения. Я никогда не использовал его для сравнения строк, полагаясь на == и != для сравнения.

if [ 'XYZ' == 'ABC' ]; then   # Double equal to will work in Linux but not on HPUX boxes it should be if [ 'XYZ' = 'ABC' ] which will work on both
  echo "Match"
else
  echo "No Match"
fi
5
ответ дан Shaik Md 21 August 2018 в 13:19
поделиться
  • 1
    Обратите внимание, что оператор == не работает на каждой оболочке. = является правильным оператором для сравнения строк, а == иногда является синонимом. – Omer Dagan 8 March 2015 в 13:26

Вы должны использовать оператор = для сравнения строк:

Sourcesystem="ABC"

if [ "$Sourcesystem" = "XYZ" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

man test говорит, что вы используете -z для соответствия пустым строкам.

188
ответ дан the Tin Man 21 August 2018 в 13:19
поделиться
  • 1
    Нет необходимости указывать ABC или XYZ. – ceving 12 February 2016 в 16:09
  • 2
    Если в вашей переменной могут быть пробелы, тогда необходимо указать цитату. – William Everett 11 January 2017 в 20:07
  • 3
    Скорректированный пример, чтобы сделать эту часть более четкой @WilliamEverett. – Per Lundberg 28 July 2017 в 08:54
  • 4
    похоже, не работает для аргументов, переданных, например, $ 1 – radtek 24 January 2018 в 19:45

Из 4 оболочек, которые я тестировал, ABC -eq XYZ оценивает значение true в test встроенном для zsh и ksh. Выражение принимает значение false в /usr/bin/test и встроенные значения для dash и bash. В ksh и zsh строки преобразуются в числовые значения и равны, так как они оба равны 0. IMO, поведение встроенных функций для ksh и zsh неверно, но спецификация для test на этом двусмысленно.

1
ответ дан William Pursell 21 August 2018 в 13:19
поделиться
  • 1
    Спасибо за тестирование. Вот почему раковина Борна популярна. – Kemin Zhou 21 March 2016 в 04:57
Другие вопросы по тегам:

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