所以我有这个bash脚本来查找n项的Fibonacci序列,它肯定不是很好的代码,但是我注意到它仍然可以处理一个错字
read -p "Enter which term of fibo seq to find: " n
table=(1 1)
for i in $(seq 0 $(($n - 1)) )
do
if [[ -z ${table[$i]} ]]; then
a1=$(( $i - 1 ))
a2=$(( $I - 2 ))
val=$(( ${table[$a1]} + ${table[$a2]} ))
table+=($val)
fi
done
echo ${table[@]}
在为a2计算表达式的if语句中,有一个大写的“I”而不是“i”。我的理解是shellscript是区分大小写的,但我是第一次接触它。所以有人能解释一下为什么它能工作吗?
2条答案
按热度按时间uyto3xhc1#
a2
将始终为-2。从bash 4.2开始,您可以使用负索引来索引数组,就像Python中一样。因此,无论是否存在输入错误,您始终访问数组中倒数第二个元素。i34xakig2#
没有声明
$I
的语句a2=$(( $I - 2 ))
等于a2=$(( - 2 ))
,这意味着a2
将始终等于-2
。