0

関数でやりたいことができません。関数get_from_A_to_Fを呼び出すときは、引数$remainderを指定します。関数で9より大きい数値を特定の文字に置き換えたい。引数が10に等しい場合は、「A」に変更する必要があります。ただし、それでも10のままです。ここで何が間違っているのでしょうか。

#!/bin/sh

get_from_A_to_F() 
{
    case $1 in
        10) $1="A"
        ;;
        11) $1="B"
        ;;
        12) $1="C"
        ;;
        13) $1="D"
        ;;
        14) $1="E"
        ;;
        15) $1="F"     
        ;; 
        [0-9]) $1=$1
        ;;  
    esac
    echo $1
}

read number
string=""
index=`expr index $number "."`
if [ $index -eq 0 ]
then
    integer=$number
    fraction=0
else
    integer=`expr substr $number 1 $(expr $index - 1)`
    fraction=`expr "$number - $integer" | bc`
fi
result=$integer
while [ $result -ne 0 ] 
do
    remainder=`expr $result % 16`
    get_from_A_to_F $remainder
    result=`expr $result / 16`
    string=$remainder$string
done

現在の出力(読み取られた数値が634の場合):

634
test: 43: 10=A: not found
10
test: 43: 7=7: not found
7
test: 43: 2=2: not found
2
4

1 に答える 1

1

$ 1に割り当てるには、次のようにします。set -- value

get_from_A_to_F16進数に変換するための優れた関数名ではありません。これを試して:

to_hex() { printf "%X\n" "$1"; }

read number

regex1='^[+-]?[0-9]+(\.[0-9]*)?$'
regex2='^[+-]?[0-9]*\.[0-9]+$'
if ! [[ $number =~ $regex1 || $number =~ $regex2 ]]; then
    echo "doesn't look like a number: $number"
else
    integer=${number%.*}
    fraction=${number#*.}
    (( integer == fraction )) && fraction=0   # no decimal point
    hex=$(to_hex $integer)
    # you don't use $fraction anywhere?
fi
于 2012-11-02T20:38:32.097 に答える