LINUX.ORG.RU

regex в sh


0

1

Подскажите, можно ли как-то сделать проверку переменной на regex в sh без сторонних модулей? Если нет, то как проверить, что переменная содержит только цифры?

★★★★★

Прибавь ноль и сравни результат

x=123
t=$(($x+0))

if [ "$x" = "$t" ]; then
  echo "x is a number"
else
  echo "x is a garbage"
fi
sdio ★★★★★
()
Ответ на: комментарий от sdio

Да, спасибо.
Так работает вроде.
Но теперь получаю ошибку в другом месте «unknown operand».
Есть способ узнать в какой строке ошибка?

UVV ★★★★★
() автор топика

[[ ... =~ a[0-9]* ]] - sh в виде линки на bash умеет, только удивлюсь. если это портабельно).

anonymous
()
Ответ на: комментарий от anonymous

[[ ... =~ a[0-9]* ]] - sh в виде линки на bash умеет, только удивлюсь. если это портабельно).

В том вопрос и был, что это работает только в bash, нужно в sh.
Решение sdio помогло.

UVV ★★★★★
() автор топика

Вот более правильный вариант:

isnum () {
    (t=$(($1+0))) 2>/dev/null
}

#test
x="12.3"

if isnum $x; then
    echo "x is a number"
else
    echo "x is a garbage"
fi
sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.