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_F不是转换为十六进制的好函数名称。尝试这个:

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 回答