gpt4 book ai didi

linux - bash代码有问题

转载 作者:太空狗 更新时间:2023-10-29 12:38:10 24 4
gpt4 key购买 nike

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 循环-1(由于 while 循环的编写方式,${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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com