Унарный оператор, ожидаемый в оболочке script при сравнении нулевого значения со строкой
У меня есть две переменные
var=""
var1=abcd
Вот мой код оболочки script
if [ $var == $var1 ]; then
do something
else
do something
fi
Если я запустил этот код, он предложит предупреждение
[: ==: unary operator expected
Как я могу это решить?
Ответы
Ответ 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, я никогда не буду использовать '==' вместо '='. Почему вы это делаете?