bash代码问题

时间:2011-01-10 12:39:00

标签: linux bash

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行会出现同样的错误

还有一个问题,我对bash脚本中使用的b / w'和“”的区别感到困惑,任何链接到一些不错的文章都会有所帮助。

1 个答案:

答案 0 :(得分:1)

除了你不能return -1之外,它对我来说很好。通常的错误值是1

错误消息是因为您有set -u并且您在for而不是INDEX开始INDEX-1循环(${ARRAY[INDEX]}将始终为空因为写while循环的方式)。由于您在%d语句中使用printf,因此空变量将打印为“0”(如果set -u未生效)。

另外,声明一个大小的数组是没有意义的。 Bash中的数组是完全动态的。

我会使用for的测试对0循环进行编码(因为-1看起来很混乱,因为它不能是数字索引数组的索引):

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

此表单已弃用:

INDEX=$[ $INDEX + 1 ]

请改用:

INDEX=$(( $INDEX + 1 ))

或者这个:

((INDEX++))

我还建议使用小写或混合大小写变量作为习惯,以减少变量名与shell变量冲突的可能性。

您没有使用$1进行任何操作。

相关问题