( Zahy | 2014. 02. 19., sze – 11:32 )

Ezzel egyetértek, bár ha az "e" tudásánál bonyolultabb kell, akkor én előveszem a bc-t.

Egyébként ha a bash nem lenne olyan buta, akkor pl. a számrendszerek közti váltást simán meg lehetne ejteni úgy, ahogy a Korn-shell (*) pár évtizede már tudja:

$ typeset -i16 i=8#33 ; echo $i
16#1b
$

Azaz az i változóra beállítom, hogy 16-os számrendszerben tessen kezelni, majd értékül adom neki a 8-as számrendszerben értelmezett 33-t (ami ugye 27). A kiíratás pedig az adott változóra érvényes számrendszerben jelenik meg (amit persze jelez is). Vagy ha utólag jövök rá hogy konvertálni akarok, akkor csak átállítom az alapszámot, és kész.

Sajnos a bash nem ismeri a typeset -i esetén a számrendszer alapszámának megadását, ő csak 10-esben hajlandó megjeleníteni, de integer tipusú változónál a bash is hajlandó elfogadni a spéci formában levő bemenetet. Azaz ha elég a valamiből 10-esbe konverzió, akkor bash alatt is lehet így:

$ typeset -i i=8#33 ; echo $i
27

(Amúgy "bash" alatt "typeset"-ként kevéssé szokták ismerni, ott valamiért "declare"-nek szeretik hívni az adott parancsot - viszont mivel mind a kettőt megeszi, én jobb szeretem a hordozhatóbb formát használni.)

(*) ami a ksh93-s nevű verziójában amúgy float változótipust is kezel typeset -f v formában.