Я пытаюсь проверить, является ли ввод целым числом, и я прошел через него сто раз, но не вижу ошибки в этом. Увы, он не работает, он запускает оператор if для всех входных данных (цифры / буквы)
read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
then
echo "Sorry integers only"
fi
Я играл с цитатами, но либо пропустил, либо ничего не сделал. Что я делаю не так? Есть ли более простой способ проверить, является ли вход просто INTEGER?
bash
regular-expression
quoting
test
lonewarrior556
источник
источник
scale='^[0-9]+$'; [[ "$scale" == "^[0-9]+$" ]] && echo equal || echo "not equal"
Используйте
-eq
оператор тестовой команды:Он работает не только в
bash
любой оболочке POSIX, но и в ней. Из тестовой документации POSIX :источник
[[
вместо старого теста,[
как мой.Для целых чисел без знака я использую:
Испытания:
источник
Поскольку OP, кажется, хочет только положительные целые числа:
Примеры:
Обратите внимание, что требуется один
[
тест:Это потому, что разыменование происходит с
[[
:источник
Это делает проверку и выводит вашу ошибку.
источник
OPTIND
Здесь тоже хорошо. просто Сайян.источник