Системное администрирование

Почему тут в качестве аргументов для функции исп-ся double quotes? shell scripting

Https://pastebin.com/U4t6GANZ - sourced script
#!/bin/bash
. validint
validfloat()
{
fvalue="$1"

if [ ! -z $(echo $fvalue | sed 's/[^.]//g') ] ; then

decimalPart="$(echo $fvalue | cut -d. -f1)"

fractionalPart="${fvalue#*\.}"

if [ ! -z $decimalPart ] ; then

#Зачем тут "" "" ???Скрипт может не принимать эти аргументы для min max
if! validint "$decimalPart" "" "" ; then
return 1
fi
fi
if [ "${fractionalPart%${fractionalPart#?}}" = "-" ] ; then
echo "Invalid floating-point number: '-' not allowed \
after decimal point" >&2 # >&2 sends output to stderr.
return 1
fi
if [ "$fractionalPart" != "" ] ; then

if! validint "$fractionalPart" "0" "" ; then
return 1
fi
fi
else

if [ "$fvalue" = "-" ] ; then
echo "Invalid floating-point format." >&2 ; return 1
fi
if! validint "$fvalue" "" "" ; then
return 1
fi
fi

return 0
}

#if validfloat $1 ; then
# echo "$1 is a valid floating-point value"
#fi

#exit 0
Ваня Зыков
Ваня Зыков
34
он с числами работает как со строками, сделано дабы проверить что это int, ведь минус отсекается легко а вот с дробной частью в консолях сложнее (операций типа ceil или кастования в int нету). так что автор удаляет все цифры (предварительно отсеча минус) и смотрит не пусто ли число - если пусто то это int(ничего кроме цифр ведь нет) иначе это точно не он

сама функция проверяет является ли число интом (целым) и находится ли в диапазоне между задаными min и max, но в скрипте функции проверки присутствует проверка пустоты min и max, т. е. если указать их пустыми это будет просто проверка целое число или нет без проверки вхождения в заданный диапазон

так
validint "0" "-1" "1" выдаст правду т. к. ноль целое и находится между -1 и 1
validint "2" "-1" "1" выдаст ложь т. к. два целое но больше верхнего лимита 1
validint "2" "" "" выдаст правду т. к. два целое а диапазон не задан

переделать в проверку на дробное не трудно, надо перед проверкой на пустоту вычистить первую (одну) тчк/зпт так же как и минус а при отсечении минуса добавить ноль перед числом (дабы не было проблем с числами типа .36)
R.
Rino_Brasco .
5 038
Лучший ответ
Rino_Brasco . так же это явная передача пустого аргумента, ведь у них нет имен только порядковые номера а разделяются пробелом, полезно когда нужно указать третий но опустить второй аргумент. когда оба аргумета отсутсвуют можно и кавыки не ставить
Возможно, validint как-то оперирует с количеством аргументов, и важно, чтобы их было ровно три.
Ваня Зыков в этом то и проблема, что @2 @3 необязательные пар-ры

Похожие вопросы