Подтвердить что ты не робот

Унарный оператор, ожидаемый в оболочке script при сравнении нулевого значения со строкой

У меня есть две переменные

var=""
var1=abcd

Вот мой код оболочки script

if [ $var == $var1 ]; then
  do something
else
  do something
fi

Если я запустил этот код, он предложит предупреждение

[: ==: unary operator expected

Как я могу это решить?

4b9b3361

Ответ 1

Поскольку значение $var является пустой строкой, это:

if [ $var == $var1 ]; then

расширяется до этого:

if [ == abcd ]; then

который является синтаксической ошибкой.

Вам нужно указать аргументы:

if [ "$var" == "$var1" ]; then

Вы также можете использовать =, а не ==; что оригинальный синтаксис, и он немного более портативный.

Если вы используете bash, вы можете использовать синтаксис [[, который не требует кавычек:

if [[ $var = $var1 ]]; then

Даже тогда, это не больно цитировать ссылку на переменные и добавлять цитаты:

if [[ "$var" = "$var1" ]]; then

может сэкономить будущему читателю минуту, пытаясь вспомнить, требуется ли ему [[... ]].

Ответ 2

Почему все люди хотят использовать '==' вместо простого '='? Это плохая привычка! Он используется только в выражении [[]]. И в (()) тоже. Но вы можете использовать просто = тоже! Это хорошо работает в любом случае. Если вы используете числа, а не строки, используйте не parcing для строк, а затем сравнивайте строки, а сравнивайте числа. как это

let -i i=5 # garantee that i is nubmber
test $i -eq 5 && echo "$i is equal 5" || echo "$i not equal 5"

Это лучше и быстрее. Я эксперт в C/С++, Java, JavaScript. Но если я использую bash, я никогда не буду использовать '==' вместо '='. Почему вы это делаете?