URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8319
[ Назад ]

Исходное сообщение
"bash откидывает  ведущие нули, как запретить"

Отправлено nikos , 24-Июн-09 13:05 
то есть  скрипт получает по snmp текстовое  значение вида  005  или 607  или 5  при этом для дальшейшей логики  действий  005  и 5  разные значения. Как убедить это  не откидывать  ведущие 0 ? ( то есть оставлять переменную текстом)

Содержание

Сообщения в этом обсуждении
"bash откидывает  ведущие нули, как запретить"
Отправлено Pahanivo , 24-Июн-09 14:06 
>то есть  скрипт получает по snmp текстовое  значение вида  
>005  или 607  или 5  при этом для
>дальшейшей логики  действий  005  и 5  разные
>значения. Как убедить это  не откидывать  ведущие 0 ?
>( то есть оставлять переменную текстом)

научится писать скрипты? ))


"bash откидывает  ведущие нули, как запретить"
Отправлено nikos , 24-Июн-09 14:36 
>>то есть  скрипт получает по snmp текстовое  значение вида  
>>005  или 607  или 5  при этом для
>>дальшейшей логики  действий  005  и 5  разные
>>значения. Как убедить это  не откидывать  ведущие 0 ?
>>( то есть оставлять переменную текстом)
>
>научится писать скрипты? ))

Не поверите -  совсем не первый  скрипт, несколько десятков работают на боевых серверах. С тем, что  явную цифру  надо воспринять как текст столкнулся в первый  раз.
Возможно я не прав, но  вся найденная информация  говорит -  Bash сам определяет тип переменной, меняя его в зависимости от значений.
вот такой извратный  Bash там стоит, что  
f="0001"; echo $f
выводит 1
на локальной  машине  все  нормально - и в ответ выводится
0001
попробую поднять версию до текущей - может полегчает



"попробуй джага-джага...."
Отправлено Andrey Mitrofanov , 24-Июн-09 15:11 
>вот такой извратный  Bash там стоит, что
>f="0001"; echo $f
>выводит 1
>на локальной  машине  все  нормально - и в ответ
>выводится
>0001
>попробую поднять версию до текущей - может полегчает

Попробуй man bash, что полегчает не обещаю.

$ f="0001"; echo $f
0001
$ declare -i f="0001"; echo $f
1
$ declare +i f="0001"; echo $f
0001
$ _


"попробуй джага-джага...."
Отправлено nikos , 24-Июн-09 16:14 
>[оверквотинг удален]
>
>Попробуй man bash, что полегчает не обещаю.
>
>$ f="0001"; echo $f
>0001
>$ declare -i f="0001"; echo $f
>1
>$ declare +i f="0001"; echo $f
>0001
>$ _

Уф и правда  полегчало ...  огромное  спасибо. man bash это конечно хорошо, но слишком безразмерно ( зная о declare  можно и прочитать man  в этой части)



"впрочем, по форумам побираться - тоже вариант"
Отправлено Andrey Mitrofanov , 24-Июн-09 16:34 
>man bash это конечно хорошо, но слишком безразмерно ( зная о declare  можно и прочитать man  в этой части)

Встани и и... Не то. Умри, неве... Опять не то. .........

Не поверишь, я не _знал_, но нашёл.

Гипотеза: проблема string vs integer, man bash -> поиск integer, увидел arythm.expantion и integer attribute of the variable set... продолжил поиск по "attribu", увидел ссылки на "declare -i", пошёл к его определению и почитал, запустил bash - нарисовал пример, что выше (да, я его редактировал -- в реале было на пару команд больше, пока игрался).

И никакого фокуса, правда? (+Никакого ответа на реплику №0 "аааа, памагитя. у меня тут. вот. блин!". Есть код -- его можно и поотлаживать.)

---"Учись, студент!" ... О, вот оно.


"bash откидывает  ведущие нули, как запретить"
Отправлено phpcoder , 24-Июн-09 15:03 
>то есть  скрипт получает по snmp текстовое  значение вида  
>005  или 607  или 5  при этом для
>дальшейшей логики  действий  005  и 5  разные
>значения. Как убедить это  не откидывать  ведущие 0 ?
>( то есть оставлять переменную текстом)

printf '%03d\n' 5