2011-01-10 8 views
2
function dec_to_bin { 

if [ $# != 2 ] 
then 
    return -1 
else 
    declare -a ARRAY[30] 
    declare -i INDEX=0 
    declare -i TEMP=$2 
    declare -i TEMP2=0 

    while [ $TEMP -gt 0 ] 
    do 
     TEMP2="$TEMP%2" 
     #printf "%d" "$TEMP2" 
     ARRAY[$INDEX]=$TEMP2 
     TEMP=$TEMP/2 
     INDEX=$[ $INDEX + 1 ] #note 

    done 

    for ((COUNT=INDEX; COUNT>-1; COUNT--)){ 

     printf "%d" "${ARRAY[$COUNT]}" <<LINE 27 
     #echo -n ${ARRAY[$COUNT]}  <<LINE 28 
    } 
fi 
} 

が、なぜこのコードは問題が

q5.sh: line 27: ARRAY[$COUNT]: unbound variable 

同じエラーがアンコメントもしライン28

もう一つ質問が付属しています。このエラーを与えている、私は違いが混乱していますB/W 'とbashスクリプトで使用されるいくつかの素晴らしい記事へのリンクは役に立ちます。

答えて

1

return -1を実行できないことを除いて、私にとってはうまく動作します。通常のエラー値は1です。あなたはset -uを持っていて、INDEX代わりのINDEX-1${ARRAY[INDEX]}が常にあるため、あなたのwhileループが書かれている方法で空になります)であなたのforループを開始しているので、

エラーメッセージがあります。 printfステートメントで%dを使用しているため、空の変数は "0"(set -uが有効でない場合)として表示されます。

また、サイズの配列を宣言することは意味がありません。 Bashの配列は完全に動的です。

Iは0ための試験(これは数値添字の配列のインデックスとすることができないので-1は混乱に見えるため)とforループをコーディングすることになる:このフォームは廃止され

for ((COUNT=INDEX - 1; COUNT>=0; COUNT--)) 

INDEX=$[ $INDEX + 1 ] 

使用この代わりに:

INDEX=$(($INDEX + 1)) 

またはこの:

((INDEX++)) 

私はまた、シェル変数と変数名の衝突の可能性を減らすために習慣として、下部ケースまたは混合ケース変数を使用することをお勧めします。

あなたは何でも$1を使用していません。