Я получаю числовые переменные иногда с 2, а иногда с 3 цифрами, например, «321» и «32». И я хочу поставить точку среди каждого из чисел. Поэтому, если я получаю «32», я получаю эхо «3.2», а если я получаю «321», я эхо «3.2.1».
Вот что я сделал:
S='321'
SL="${#S}" #string lentgh
n1=`echo $S | cut -c 1-1`
n2=`echo $S | cut -c 2-2`
if [ "$SL" -eq 2 ]; then
echo $n1.$n2
elif [ "$SL" -eq 3 ]; then
n3=`echo $S | cut -c 3-3`
echo $n1.$n2.$n3
else
die 'Works only with 2 or 3 digits'
fi
Мой вопрос: есть ли более короткий способ сделать то же самое?
UPDATE:
Короче, но все еще многословно:
SL="${#1}" #string lentgh
S=$1
if [ "$1" -eq 3 ]; then
$n3=".${S:2:1}"
fi
if [ "$SL" -lt 2 ] && [ "$SL" -gt 3 ]; then
die 'Works only with 2 or 3 digits'
fi
echo "${S:0:1}.${S:1:1}$n3"
ОБНОВЛЕНИЕ 1:
Если я включу блок if, версия sed + regex будет такой же, как и версия для чистого bash:
SL="${#1}" #string lentgh
S=$1
N=$(echo $S | sed -r "s/([0-9])/\1./g")
echo ${N%%.}
if [ "$SL" -lt 2 ] && [ "$SL" -gt 3 ]; then
die 'Works only with 2 or 3 digits'
fi
Или, используя одну строку sed + regex с двумя выражениями:
SL="${#1}" #string lentgh
echo $1 | sed -e 's/\([[:digit:]]\)/.\1/g' -e 's/^\.//'
if [ "$SL" -lt 2 ] && [ "$SL" -gt 3 ]; then
die 'Works only with 2 or 3 digits'
fi
Спасибо.