Как проверить, является ли переменная числом в Bash?
Я просто не могу понять, как я могу убедиться, что аргумент, переданный моему script, является числом или нет.
Все, что я хочу сделать, это что-то вроде этого:
^7+$ ]] && echo OKKK || echo NOOO
37 ответов
Один из подходов заключается в использовании регулярного выражения, например, так:
Если значение не обязательно является целым числом, попробуйте соответствующим образом изменить регулярное выражение; например:
. или для обработки чисел со знаком:
изменилась между 3.1 и 3.2, тогда как обработка обратной косой черты в присваиваниях постоянна во всех соответствующих выпусках bash. Таким образом, следуя практике всегда присваивать регулярные выражения переменным перед сопоставлением с ними с помощью =
избежать неожиданностей. Я делаю это здесь, чтобы учить хорошим привычкам, даже если у этого конкретного регулярного выражения нет выхода из обратной косой черты.
(x) ]] без необходимости сохранения в переменной также будет работать только начиная с 4.0. Расширенные шаблоны нужно включить только один раз в начале скрипта, чтобы это не имело значения. Он также совместим со всеми версиями bash, начиная как минимум с 2.05b. Эти последние мои комментарии уже были о том, почему кто-то предпочел бы расширенные шаблоны, а не =
. Информация также может быть полезна для других читателей, возможно, если они заботятся о совместимости.
‘^6+$’ ]]; then echo good; fi и ничего не получил. Но re=’^3+$’; if [[ 123 =
в кавычки, делает его уже не регулярным выражением, а регулярной строкой (в современных версиях bash, но не в некоторых древних), тогда как версия, которую я дал в этом ответе, работает последовательно во всех релиз, где =
» И «[[]]»? Может кто-нибудь объяснить компоненты if / else?
Без багизмов (работает даже в System V sh),
Это отклоняет пустые строки и строки, содержащие не-цифры, принимая все остальное.
Следующее решение может также использоваться в базовых оболочках, таких как Bourne, без необходимости использования регулярных выражений. В основном любые операции вычисления числовых значений, использующие не числа, приведут к ошибке, которая будет неявно рассматриваться как ложная в оболочке:
Перенаправление стандартной ошибки предназначено для того, чтобы скрыть сообщение «ожидается целочисленное выражение», которое распечатывает bash, если у нас нет числа.
ПРЕДОСТЕРЕЖЕНИЯ (благодаря комментариям ниже):
Как проверить, является ли переменная числом в Bash?
Я просто не могу понять, как мне убедиться, что аргумент, переданный моему сценарию, является числом или нет.
Все, что я хочу сделать, это что-то вроде этого:
30 ответов
Один из подходов заключается в использовании регулярного выражения, например, так:
Если значение не обязательно является целым числом, рассмотрите возможность изменения регулярного выражения соответствующим образом; например:
. или для обработки чисел со знаком:
Я попробовал рецепт ультрапильного полотна, так как он мне показался наиболее практичным, и не смог заставить его работать. В конце концов, я разработал другой способ, основанный, как и другие, на подстановке параметров, на этот раз с заменой регулярного выражения:
Что мне нравится в этом, так это его компактность и гибкость. В этой форме он работает только с целыми числами без разделителей с основанием 10, хотя, конечно, вы можете использовать сопоставление с образцом для удовлетворения других потребностей.
Без башизмов (работает даже в System V sh),
Это отклоняет пустые строки и строки, содержащие не цифры, принимая все остальное.
Следующее решение также можно использовать в базовых оболочках, таких как Bourne, без необходимости использования регулярных выражений. По сути, любые операции оценки числовых значений с использованием нечисловых значений приведут к ошибке, которая неявно будет считаться ложной в оболочке:
Перенаправление стандартной ошибки предназначено для того, чтобы скрыть сообщение «ожидаемое целочисленное выражение», которое bash выводит на случай, если у нас нет числа.
ПРЕДЛОЖЕНИЯ (спасибо комментариям ниже):
Как проверить, является ли переменная числом в Bash?
Я просто не могу понять, как убедиться, что аргумент, переданный моему скрипту, является числом или нет.
все, что я хочу сделать, это что-то вроде этого:
30 ответов
один подход заключается в использовании регулярного выражения, например:
Если значение не обязательно является целым числом, рассмотрите возможность изменения регулярного выражения соответствующим образом; например:
. или, для обработки чисел со знаком:
без bashisms (работает даже в системе в ш),
это отклоняет пустые строки и строки, содержащие не цифры, принимая все остальное.
следующее решение также может использоваться в базовых оболочках, таких как Bourne, без необходимости регулярных выражений. В основном любые операции оценки числовых значений, использующие номера, приведут к ошибке, которая будет неявно рассматриваться как false в shell:
перенаправление стандартной ошибки есть, чтобы скрыть сообщение «integer expression expected», которое bash распечатывает в случае, если у нас нет числа.
предостережения (благодаря комментариям ниже):
это проверяет, является ли число неотрицательным целым числом и является независимым от оболочки (т. е. без башизмов) и использует только встроенные оболочки:
НО ОШИБАЕТСЯ.
As jilles прокомментировал и предложил в ответ это правильный способ сделать это с помощью оболочки-моделей.
Я удивлен решениями, непосредственно анализирующими числовые форматы в оболочке. оболочка не очень подходит для этого, являясь DSL для управления файлами и процессами. Есть достаточное количество парсеров немного ниже, например:
Как проверить, является ли переменная числом в Bash?
Я просто не могу понять, как я могу убедиться, что аргумент, переданный моему script, является числом или нет.
Все, что я хочу сделать, это что-то вроде этого:
Один из подходов заключается в использовании регулярного выражения, например, так:
Если значение не обязательно является целым числом, попробуйте соответствующим образом изменить регулярное выражение; например:
. или для обработки чисел со знаком:
Без багизмов (работает даже в System V sh),
Это отклоняет пустые строки и строки, содержащие не-цифры, принимая все остальное.
Следующее решение также можно использовать в базовых оболочках, таких как Bourne, без необходимости использования регулярных выражений. В основном любые операции вычисления числовых значений, использующие не числа, приведут к ошибке, которая будет неявно рассматриваться как ложная в оболочке:
Перенаправление стандартной ошибки предназначено для того, чтобы скрыть сообщение «ожидается целочисленное выражение», которое распечатывает bash, если у нас нет числа.
ПРЕДОСТЕРЕЖЕНИЯ (благодаря комментариям ниже):
- Числа с десятичными точками не идентифицируются как действительные «числа» Использование [[ ]] вместо [ ] всегда будет иметь значение true Большинство небашевых оболочек всегда будут оценивать это выражение как true Поведение в Bash недокументировано и поэтому может меняться без предупреждения Если значение включает пробелы после числа (например, «1 a»), возникает ошибка, например bash: [[: 1 a: syntax error in expression (error token is «a») Если значение совпадает с var-name (например, я = «i»), выдает ошибку, например bash: [[: i: expression recursion level exceeded (error token is «i»)
Как проверить, что переменная является числом?
Добрый день, уважаемые.
Скучая на работе и просто решив побаловаться BAT, я написал небольшой скрипт, который производит перезагрузку системы при помощи команды shutdown. Как проверить, что переменная %TIME% является целочисленной?

Можно ли в Python (не через type) проверить, является ли переменная любой строкой\любым числом.
Как проверить, является ли переменная числом
Есть структура точки struct Point < double x; double y; >; Есть вектор из структур.

Проверить, является ли переменная числом в C++ Builder не охота в цикл загонять и проверять, есть.

например задана строка string str=»6.9″ и как проверить что вещественное? для целого типа можно.
retrospider, Ваша переменная «TIME» может войти в конфликт с одноимённой системной динамической переменной, поэтому переименуйте её, например, в «$TIME«.
Решение
Но там и ошибку выдаёт «Неверное число. Числа ограничены 32 битами точности.»
И errorlevel не 0.
Так что всё нормально.
Добавлено через 1 час 40 минут
На самом деле, всё несколько сложнее
— Число может выходить из допустимого диапазона (как в примере).
— Число может быть не той системы (восмеричное, шестнадцатиричное).
— Число может иметь незначащие нули (001).
— Число может быть со знаком.
— Это может быть даже выражение, даже содержащее другие переменные
Я последовал совету товарища Smitis, потому что для меня он проще и понятнее. Из ваших комментариев не совсем понял, какие неправильные данные можно ввести, чтобы скрипт не счел это ошибкой?
Вот переделанный вариант кода:
Подскажите, как можно сломать?
PS: неужели использования оператора GOTO стараются избежать даже в пакетных файлах? А мне он так нравится : (
Спасибо! Я уже и сам заметил, в новой версии кода ввел проверку еще и на отрицательные значения.
Добавлено через 2 часа 4 минуты
Последняя версия кода (мало ли, вдруг кому пригодится):
Не претендую на правильность и оптимизацию, даже напротив, уверен, что код «деревянный» и многие моменты можно было сократить, чтобы сам код уменьшился в размерах раза в два-три, но. таков уж я. Пакетный файл, ради интереса, скомпилировал в исполняемый файл и теперь использую программку, запуская ее с рабочего стола из rocket dock. Спасибо всем, кто помог мне.
PS: Знаю, что куда как проще и быстрее вызвать shutdown из CMD. Но мне было интереснее написать для этого скрипт и сделать для него какой-нибудь текстовый интерфейс.
Как определить, является ли переменная целым числом
Доброй ночи! Есть функция матлаб чтобы определить является ли переменная целым числом, что-нибудь.
Проверить, что заданное целое число является трехзначным нечетным числом
Заданное целое число является трехзначным нечетным числом (учитывайте и отрицательные числа).
Как проверить, является ли введенное значение числом?
В поле Edit нужно ввести число. Как проверить, не ввел ли туда пользователь недопустимый символ.
Как проверить, является ли эта строка числом?
С помощью Console.ReadLine() считываю строку, как проверить, является ли эта строка числом? Я.

Как проверить, является ли введенная пользователем строка числом?

Пользователем вводится строка,после чего нужно посимвольно ее проверить. Если какой-то символ.



