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'和“”的区别感到困惑,任何链接到一些不错的文章都会有所帮助。
答案 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
进行任何操作。