Bash脚本实现FizzBuzz及循环语法问题求助
Bash版FizzBuzz实现及语法问题修复
先解决循环语法问题
你的脚本输出Number: {0..20..5},原因是大括号步长写法{start..end..step}仅在Bash 4.0及以上版本支持,如果用低版本Bash或通过sh命令执行脚本(而非bash),该语法会被当作字符串解析。
两种解决方式:
- 确保用Bash执行脚本:给脚本加执行权限
chmod +x your_script.sh,然后运行./your_script.sh(依赖脚本开头的#!/bin/bash),或直接用bash your_script.sh调用 - 改用兼容性更强的C风格for循环,不受Bash版本限制:
#!/bin/bash for ((i=0; i<=20; i+=5)) do echo "Number: $i" done
完整FizzBuzz实现
以下是符合需求的完整代码,遍历1到100,按规则输出:
#!/bin/bash for ((i=1; i<=100; i++)) do output="" ((i % 3 == 0)) && output="Fizz" ((i % 5 == 0)) && output+="Buzz" # 若未匹配3/5倍数,输出数字本身 echo "${output:-$i}" done
代码逻辑说明
- 用C风格循环遍历1到100,兼容性覆盖绝大多数Bash版本
- 先判断3的倍数,赋值
output为"Fizz";再判断5的倍数,追加"Buzz",自然处理同时是3和5倍数的情况(输出"FizzBuzz") - 用
${output:-$i}语法简化判断:如果output为空,就输出数字i,否则输出output
内容的提问来源于stack exchange,提问作者Kachi
相关产品推荐
相关产品推荐

