I would like to reverse the operation performed by the following bash
command:
$ echo $((62#a39qrT))
9207903953
i.e. convert decimal 9207903953 to base 62, keeping bash
standard of {0..9},{a..z},{A..Z}
.
I know I can do this by using bc
, but I will have to manually convert each character then. For example, I do this currently:
BASE62=($(echo {0..9} {a..z} {A..Z}))
for i in $(echo "obase=62; 9207903953" | bc)
do
echo -n ${BASE62[$i]} #Doesn't work if bc's output contains leading zeroes
done
There must be a way to do this in a less 'hackier' way. Do you know of a way to do this more efficiently?
EDIT: changed bc
input.
Arbitrary base10 to baseX conversion function using
gforth
, andtr
, (tr
is needed sincegforth
andbash
use different chars to print bases):Output:
Or without bc and with arbitrary base:
bc<<<"obase=62;$1"
converts to a sequence of space prefixed decimal numbers from 00 to 61Or without the for loop:
I do really appreciate the solution you came up with, and I guess there's no way around it straight with bash. Here's the little point you've missed:
Output: