【问题标题】:generating new line for each loop bash为每个循环 bash 生成新行
【发布时间】:2016-10-19 11:52:49
【问题描述】:

我有这个关于 bash 输出的问题,我需要编写可以输出的代码:

1
22
333

使用循环到目前为止我有这个代码:

First loop....
for ((i=1; i<=1; i=i+1))
do
    echo $i
done
#Second loop....
for ((i=1; i<=2; i++))
do

for ((j=2; j<=2; j++))
do
    echo -n $j

done
done
#Third loop.....
for ((i=1; i<=2; i++))
do

for ((j=2; j<=2; j++))
do
    echo -e $j

done
done

问题是它在第二个循环中输出第三个循环

1 
223 
33

感谢您的帮助。

【问题讨论】:

  • 你为什么要混合所有这些不同类型的echo
  • 为什么不简单地使用算术?

标签: bash loops unix for-loop


【解决方案1】:

一个简单的嵌套 for 循环就足以满足您的需求:

代码:

for ((i=1; i<=5; i++))
do
    for((j=1; j<=$i; j++)) 
    do
        echo -n $i
    done
    echo
done

输出:

1
22
333
4444
55555

【讨论】:

    【解决方案2】:

    在第一个循环结束后输出换行符:

    for ((i=1; i<=3; i++)) ; do
        for ((j=1; j<=i; j++)) ; do
            echo -n $i
        done
        echo
    done
    

    注意,在 Perl 中,您可以在重复运算符x 中隐藏内部循环:

    perl -le 'print $_ x $_ for 1 .. 3'
    

    【讨论】:

      【解决方案3】:

      尝试两个嵌套的 for 循环,其中包含从 STDIN 读取的交互式开始和结束值,如下所示:

      # To make it more interactive
      echo -n 'Enter start value: '
      read START
      echo -n 'Enter finish value: '
      read FINISH
      
      # Two nested for loops
      for ((I=$START; I<=FINISH; I++))
      do
          for ((J=$START; J<=$I; J++))
          do
              echo -n $I
          done
          echo
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        • 1970-01-01
        • 1970-01-01
        • 2020-04-05
        • 2023-03-02
        相关资源
        最近更新 更多