2

我刚刚在 Hacker News 上找到了以下 FizzBu​​zz 示例,它使用了一段我发现很难搜索的语法

for num in {1..100} ; do
  out=""
  (( $num % 3 == 0 )) && out="Fizz"
  (( $num % 5 == 0 )) && out="${out}Buzz"
  echo ${out:-$num}
done

我不明白的一点是变量使用是如何echo在行中工作的。虽然我可以清楚地看到它变成$outif not empty, else$num

4

1 回答 1

4
for num in {1..100} ; do 

从 1 到 100 循环。将 num 设置为途中的每个整数

out=""

一无所有

(( $num % 3 == 0 )) && out="Fizz"

如果这个数字可以被 3 整除,则设置为 Fizz

  (( $num % 5 == 0 )) && out="${out}Buzz"

如果该数字可被 5 整除,则设置为Buzzout中包含的任何内容。out

  echo ${out:-$num}

使用参数替换来检查 out 是否包含某些内容,如果不包含,则使用 num 代替。回显替换的结果。

done

资源

http://tldp.org/LDP/abs/html/parameter-substitution.html - 参数替换

http://tldp.org/LDP/abs/html/ops.html - 让命令((...))

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html - 循环

于 2015-01-21T10:27:51.910 回答