5 if printf "%s" "$1" | grep -qE '^0b[0-1]+$'; then
6 if [ "$m" -eq 0 ]; then
7 printf "Binary %s → Decimal: " "$1"
9 t
=$(printf "%s" "$1" | sed 's/^0b//')
10 printf "ibase=2; %s / %s" "$t" "$k" | bc | tr -d '\n' && printf "%s\n" "$p"
12 elif printf "%s" "$1" | grep -qE '^([0-9A-Fa-f]+|0x[0-9A-Fa-f]+)$'; then
13 if [ "$m" -eq 0 ]; then
14 printf "Hex %s → Decimal: " "$1"
16 t
=$(printf "%s" "$1" | sed 's/^0x//')
17 printf "ibase=16; %s / %X" "$(printf "%s" "$t" | sed 'y/abcdef/ABCDEF/')" "0b$k" | bc | tr -d '\n' && printf "%s\n" "$p"
20 printf "Error: '%s' is not a valid decimal or hexadecimal number\n" "$1" >&2
31 USAGE
="usage: ${0} [-mnKMG] ..."
32 if ! [ "$1" = "x" ] && ! [ -t 0 ]; then
33 cat | tr '\n' ' ' | xargs todec
"x" "$@"
36 elif [ "$1" = "x" ]; then
42 printf "Error: No arguments provided\n%s\n" "$USAGE" >&2
49 while getopts "mnKMG" flag
; do
54 K
) k
=10000000000; p
='K'; ;;
56 M
) k
=100000000000000000000; p
='M'; ;;
58 G
) k
=1000000000000000000000000000000; p
='G'; ;;
59 *) printf "%s\n" "$USAGE" >&2 ; return 2 ;;
63 shift $(( OPTIND - 1 ))
68 if [ "$n" -eq 1 ] && [ "$m" -eq 1 ]; then
69 t
=$(printf "%s" "$t" | tr '\n' ' ')
71 elif [ "$n" -eq 1 ] && [ "$m" -eq 0 ]; then
72 t
=$(printf "%s" "$t" | tr '\n' ';')