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
你正在开始你的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 ))
or this:
((INDEX++))
我还建议养成使用小写或混合大小写变量的习惯,以减少变量名与 shell 变量发生冲突的机会。
你没有使用$1
为了任何东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)