Próbuję sprawdzić, czy dane wejściowe są liczbami całkowitymi i przekroczyłem je sto razy, ale nie widzę w tym błędu. Niestety nie działa, uruchamia instrukcję if dla wszystkich danych wejściowych (cyfr / liter)
read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
then
echo "Sorry integers only"
fi
Bawiłem się cytatami, ale albo to przegapiłem, albo nic nie zrobiłem. Co robię źle? Czy istnieje łatwiejszy sposób sprawdzenia, czy wejście jest tylko liczbą całkowitą?
bash
regular-expression
quoting
test
lonewarrior556
źródło
źródło
scale='^[0-9]+$'; [[ "$scale" == "^[0-9]+$" ]] && echo equal || echo "not equal"
Użyj
-eq
operatora polecenia testowego :Działa nie tylko w
bash
dowolnej powłoce POSIX. Z dokumentacji testu POSIX :źródło
[[
zamiast starego testu[
jako mojego.W przypadku liczb całkowitych bez znaku używam:
Testy:
źródło
Ponieważ PO wydaje się chcieć tylko dodatnich liczb całkowitych:
Przykłady:
Pamiętaj, że
[
wymagany jest pojedynczy test:Wynika to z faktu, że dereferencje występują z
[[
:źródło
Sprawdza to i wyświetla błąd.
źródło
OPTIND
tu też jest dobrze. tylko saiyan.źródło