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 '' 和 ""的区别感到困惑任何指向一些好文章的链接都会有所帮助。
最佳答案
它对我来说很好,除了你不能做 return -1
。通常的错误值为 1
。
错误消息是因为你有 set -u
并且你在 INDEX
而不是 INDEX 开始你的
(由于 for
循环-1while
循环的编写方式,${ARRAY[INDEX]}
将始终为空)。由于您在 printf
语句中使用了 %d
,因此空变量将打印为“0”(如果 set -u
未生效).
还有,声明一个有大小的数组是没有意义的。 Bash 中的数组是完全动态的。
我会用 0
测试编写 for
循环(因为 -1
看起来很困惑,因为它不能是索引数字索引数组):
for (( COUNT=INDEX - 1; COUNT>=0; COUNT--))
此表单已弃用:
INDEX=$[ $INDEX + 1 ]
改用这个:
INDEX=$(( $INDEX + 1 ))
或者这个:
((INDEX++))
我还建议养成使用小写或混合大小写变量的习惯,以减少变量名与 shell 变量发生冲突的机会。
您没有使用 $1
做任何事情。
关于linux - bash代码有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646902/