Поскольку вы новичок в написании сценариев, вы можете не знать, что [[
- это башизм.Вы можете даже не знать, что такое bashism, но оба ответа, приведенные до сих пор, ведут вас по пути к замедленному будущему сценариев, продвигая их использование.
Чтобы проверить, совпадает ли переменная со строкой в любом варианте оболочки Bourne, вы можете сделать test $V = 14
Если вы хотите сравнить целые числа, используйте test $V -eq 14
.Разница лишь в том, что последний выдаст ошибку, если $ V не будет выглядеть как целое число.Есть веские причины указывать переменную (test "$V" = 14
), но кавычки часто не нужны, и я считаю, что это является основной причиной общей путаницы, поскольку "14"=="14"
идентичен "14==14"
, где более очевидно, что '== 'не используется в качестве оператора.
Следует отметить несколько вещей: используйте один '=' вместо '==', потому что не все оболочки распознают '==', команда [
идентична test
, но требует финальногоаргумент ]
и многие руководящие принципы кодирования sh рекомендуют использовать test
, поскольку он часто генерирует более понятный код, [[
распознается только ограниченным числом оболочек (это ваша основная проблема, так как ваша оболочка не распознает[[
и ищет команду с таким именем. Удивительно, если ваш шебанг действительно указывает /bin/bash
вместо /bin/sh
).