【问题标题】:Nested loop in shellshell中的嵌套循环
【发布时间】:2011-04-27 03:33:16
【问题描述】:

我是 shell 编程的初学者。我有一个与 shell 脚本中的嵌套循环有关的问题。我想得到这样的输出:

输入:4

输出:

*
**
***
****

这是我目前使用的脚本:

echo "input : "
read a
for ((i=0; i<a; i++))
do
   for ((j=0; j<i; j++))
   do
       echo "*"
   done
   echo "\n"
done

当我试图执行我的程序时,我得到一个错误:Bad for looping

提前致谢。

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    试试这个

    echo "input : "
    read a
    for ((i=0; i<a; i++))
    do
       for ((j=0; j<=i; j++))
       do
           printf "*"
       done
       echo
    done
    

    要不打印换行符,可以使用 printf(或 echo -n,但不如 printf 便携)

    【讨论】:

    • 感谢您的提前。在 shell 脚本中,你更喜欢 printf 而不是 echo 吗?
    • 其实看个人。如果我不编写可移植脚本,我只使用echo 进行简单显示。如果我想要字符串格式,我使用printf
    【解决方案2】:

    脚本没有任何错误!虽然回声需要不同,如下所示:

    echo "input : "
    read a
    for ((i=0; i<a; i++))
    do
       for ((j=0; j<i; j++))
       do
           echo -ne "*"
       done
       echo -ne "\n"
    done
    

    您可以尝试在访问变量时在变量前面添加 $。 它没有给我任何错误。

    【讨论】:

    • echo -e "\n" 将打印 2 个新行,echo -e "" 就足够了。
    • @anubhava - 正确编辑为 echo -ne "\n" 以使其一致并清楚地传达换行符的含义
    • @manojids,只需 echo 将提供与 echo -ne "\n" 相同的输出
    • @ghostdog74 - 我在上面的评论中解释说,这是为了更清楚地传达 echo 中的换行符,因为显然 OP 没有意识到这一点。
    【解决方案3】:
    #!/bin/bash
    
    print_starry_row()
    {
        n="$1"
        for ((i=0;i<n;i++))
        {
            echo -n "*"
        }
        echo
    }
    
    read -p "Enter number of stars? " num
    
    if [[ "$num" -eq $num ]]
    then
        for ((i=1;i<=num;i++))
        {
            print_starry_row $i
        }
    else
        echo "You must enter a valid integrer"
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-20
      • 2021-08-21
      • 2016-06-02
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多