为什么我的for循环: for ((i=1,;i<=$n,i++))不能工作?我搞不懂这事。例如,当n为4时,行echo $n返回4,但不会再次进入循环。我也没有任何错误。我试着做一个小循环,比如:
for ((i=1, i<=$n; i++)); do
echo "this works"
done这件事做得很好,对我来说就更奇怪了。提前感谢
read n
length=16
p=()
p[1]=50
rest=63
function s() {
arr=($@)
line="_____________________________________________________________________"
for i in ${arr[@]}; do
line=$( echo $line | sed s/./1/$i)
done
echo $line
}
for ((i=1; i<=$n; i++)); do
echo $n
for ((j=1; j<=$length; j++)); do
s ${p[@]}
done
len=${#p[@]}
((len=$len*2))
for ((k=1; k<=$len; k+=2)); do
((p[$k+1]=p[$k]+1))
((p[$k]=p[$k]-1))
done
for ((l=1; l<=$length; l++)); do
s ${p[@]}
len=${#p[@]}
for ((m=1; m<=$len; m+=2)); do
((p[$m+1]=p[$m+1]+1))
((p[$m]=p[$m]-1))
done
done
((rest=$rest-2*$length))
((length=$length/2))
done发布于 2016-10-21 21:33:48
如果不声明变量为局部变量,它们是全局的--因此s函数中的循环覆盖函数外部使用的相同的i计数器,从而导致外部循环的早期退出。
考虑使用以下代码:
s() {
local -a arr # declare a function-local array (sparse, like all bash arrays)
local i # ...and a function-local counter
for i; do # by default, a for statement iterates over "$@"; that works for us.
arr[$i]=1 # specifically set a value only for named items
done
# ...thereafter, iterate through the range of characters we want to print...
for ((i=0; i<70; i++)); do
printf '%s' "${arr[$i]:-_}" # and print the array entry if present, or an _ otherwise
done
printf '\n' # ...followed by a trailing newline.
}https://stackoverflow.com/questions/40185624
复制相似问题