Portál AbcLinuxu, 8. května 2025 00:10

Dotaz: problém se sčítáním v shellu

13.11.2012 16:48 Jaro
problém se sčítáním v shellu
Přečteno: 498×
Odpovědět | Admin
Ahoj, vysvětlí mi to někdo? Dělá to i Vám? Díky
f=007; f=$((f+0)); echo $f # výsledek 7 - OK
f=008; f=$((f+0)); echo $f # výsledek 008: value too great for base (error token is "008")
f=009; f=$((f+0)); echo $f # výsledek 009: value too great for base (error token is "009")
f=010; f=$((f+0)); echo $f # výsledek 8 - CHYBA

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.11.2012 17:03 NN
Rozbalit Rozbalit vše Re: problém se sčítáním v shellu
Odpovědět | | Sbalit | Link | Blokovat | Admin
cituji:
"Numerical values starting with a zero (0) are interpreted as numbers in octal notation by the C language. As the only digits allowed in octal are {0..7}, an 8 or a 9 will cause the evaluation to fail."
Mozna nekdo dohleda , proc tomu tak je..
13.11.2012 17:13 Jaro
Rozbalit Rozbalit vše Re: problém se sčítáním v shellu
WOW, tím se to vše vysvětluje.... a nějaké jednoduché řešení jak odstranit ty počáteční nuly? Díky
13.11.2012 19:37 Zadejte vaše jméno
Rozbalit Rozbalit vše Re: problém se sčítáním v shellu
| bc -l
14.11.2012 09:21 cronin | skóre: 49
Rozbalit Rozbalit vše Re: problém se sčítáním v shellu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na aritmetiku v shellových skriptoch používam nástroj k tomu určený - kalkulačku:
[cronin][~][09:17:55] echo 0007 + 0 | bc 
7
[cronin][~][09:18:12] echo 0008 + 0 | bc 
8
[cronin][~][09:18:17] echo 0009 + 0 | bc 
9
Ono shell nie je vždy bash, a kto musí písať skripty prenositeľné medzi Linuxom, Solarisom a BSD, naučí sa našľapovať opatrne, i tak si sem-tam nohu vytkne.
14.11.2012 09:40 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: problém se sčítáním v shellu
Odpovědět | | Sbalit | Link | Blokovat | Admin
V manuali bashu je to popisane. Sustavu v ktorej sa snazi pocitat automaticky odhaduje podla tvaru cisla (0... - 8, 0x... - 16,...), ale zapisom <sustava>#<cislo> sa mu da sustava nanutit. Takze:
$ f=009; $((10#$f+0)); echo $f
10
Ale neviem ako mu nanutit, aby bol vysledok v nejakej sustave, alebo aby ostal v tej, v ktorej je prvy operand.
If you hold a Unix shell up to your ear, you can you hear the C.
15.11.2012 16:28 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: problém se sčítáním v shellu
Výsledek: použít printf místo echo.
15.11.2012 22:10 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: problém se sčítáním v shellu
printf dokaze iba sustavu 8, 10 a 16, nie? Nieze by to na bezny zivot nestacilo, ale bash dokaze nacitat aj 7#44 (==32).
If you hold a Unix shell up to your ear, you can you hear the C.
16.11.2012 02:38 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: problém se sčítáním v shellu
Pravda, to mi nedošlo. Z víceméně standardních utilit ještě bc, umí tisknout slušně báze od dvou do 16 (proměnná obase), na zobrazení vyšší báze má vlastní, a dost divný, názor.

Ale jinak také nevím. Zajímavé, že když už někdo psal do bashe takové šílenosti s bází až 64, tak neudělal nic pro formátování výstupu.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.