Loop
April 17, 2025About 2 minarchitecturebashloop
无限循环
Tips
在 Hulo 中无限循环默认使用 while 实现,当然你也可以修改编译选项自定义。
while
infiniteLoop: whileuntil
infiniteLoop: untilfor
infiniteLoop: for输入:
loop {
echo "Hello World"
}输出:
while
while true; do
echo "Hello World"
doneuntil
until false; do
echo "Hello World"
donefor
for ((;;)); do
echo "Hello World"
donewhile
输入:
$i := 0
loop $i < 10 {
echo "i = $i"
$i++
}输出:
i=0
while [ "$i" -lt 10 ]; do
echo "i = $i"
i=$((i + 1))
doneuntil
Important
由于 until 语句和 while 仅仅是条件差了个取反,Hulo 在默认情况下不会翻译成 until,你需要在编译器选项中手动设置以取代 while 规则。
在 huloc.yaml 中设置 enableUntil: true 即可
输入:
$i := 0
loop $i < 10 {
echo "i = $i"
$i++
}输出:
i=0
until [ "$i" -ge 10 ]; do
echo "i = $i"
i=$((i + 1))
donefor
输入:
loop $i := 0; $i < 5; $i++ {
echo $i
}输出:
for (( i=0; i<5; i=i+1 )); do
echo $i
doneforeach
数组元素
输入:
loop $i in ["a", "b", "c"] {
echo $i
}输出:
for i in a b c; do
echo $i
done通配符
输入:
loop $i in f"*.png" {
ls -l $i
}输出:
for i in *.png; do
ls -l $i
donebreak、continue
break 命令立即终止循环,程序继续执行循环块之后的语句,即不再执行剩下的循环。
输入:
$i := 0
loop {
if $i == 5 {
break
}
$i++
}输出:
i=0
while true; do
if [ "$i" -eq 5 ]; then
break
fi
i=$((i + 1))
donecontinue 命令立即终止本轮循环,开始执行下一轮循环。
输入:
loop $i := 0; $i < 10; $i++ {
if $i == 5 {
continue
}
echo $i
}输出:
for ((i = 0; i < 10; i++)); do
if [[ "$i" -eq 5 ]]; then
continue
fi
echo "$i"
doneselect
Tips
为了保证跨平台,Hulo 暂不支持 select 语法。因此,为了使用原生select语法糖,你需要使用unsafe嵌入原生脚本。
输入:
${
select fruit in apple banana orange
do
if [ -n "$fruit" ]; then
echo "You selected: $fruit"
break
else
echo "Invalid choice"
fi
done
}输出:
select fruit in apple banana orange
do
if [ -n "$fruit" ]; then
echo "You selected: $fruit"
break
else
echo "Invalid choice"
fi
done