【问题标题】:How to use brace expansion with newline如何使用带有换行符的大括号扩展
【发布时间】:2017-04-18 21:24:37
【问题描述】:

我试过这个方法,但它在新行的开头显示了一个不需要的空格:

$ echo -e {1..5}"\n"  
1  
 2  
 3  
 4  
 5  

【问题讨论】:

  • 解决方法:printf -v a "%s\n" {1..5}; echo -n "$a"

标签: bash shell brace-expansion


【解决方案1】:

如果你只是想输出一个数字列表,seq 是一个专用工具-

$ seq 1 5 
1
2
3
4
5

【讨论】:

    【解决方案2】:

    大括号扩展创建一个空格分隔的字符串列表。在您的示例中,这意味着您得到1\n 2\n 3\n 4\n 5\n,它解释了每个换行符后的空格。

    要获得对输出格式的更多控制,您可以使用循环:

    for i in {1..5}; do echo $i; done
    

    【讨论】:

    • 我可以通过 for 循环和]$ echo -e {1,"\n"{2..5}} 解决这个问题,但是为什么$ echo -e {1..5}"\n" 不起作用
    • 使用echo -e {1,"\n"{2..5}},您将获得1 \n2 \n3 \n4 \n5。请注意,现在空格在数字之后和 换行符之前。它们没有消失,只是不可见。
    • 但是怎么去掉空格呢?
    • 正如我在答案中已经说过的,大括号扩展创建了一个用空格分隔的字符串列表。如果您不想在输出中出现空格,则不能直接使用大括号扩展的输出。 for 循环是一种可能的解决方案,因为它会拆分输出并删除空格。
    【解决方案3】:

    尽可能接近您的原始问题,您可以通过管道传输到 sed。这只是摆脱了那些“不需要的空间”。

    echo -e {1..5}'\n' | sed 's/ //g'
    

    在这种情况下 sed 的一般语法:sed 's/REGEXP/REPLACEMENT/FLAGS' 其中 's' = 替换和 '/' = 分隔符

    【讨论】:

      【解决方案4】:

      只需在左大括号前加一个退格键,如下所示: echo - e \\b{1..5}\\n

      【讨论】:

        【解决方案5】:

        您可以将输出通过管道传输到 tr 以简单地将空格转换为换行符:

        $ echo {1..5} | tr ' ' '\n'
        1
        2
        3
        4
        5
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多