首页 文章

Bash中的Echo newline打印文字\ n

提问于
浏览
1750

在Bash中,试过这个:

echo -e "hello\nworld"

但它不打印换行符,只有 \n . 如何让它打印换行符?

我正在使用Ubuntu 11.04 .

17 回答

  • 37

    你确定你在bash吗?这三种方式对我有用:

    echo -e "Hello\nworld"
    echo -e 'Hello\nworld'
    echo Hello$'\n'world
    
  • 1376

    有时您可以传递由空格分隔的多个字符串,它将被解释为 \n .

    例如,当使用shell脚本进行多行通知时:

    #!/bin/bash
    notify-send 'notification success' 'another line' 'time now '`date +"%s"`
    
  • 0

    我的剧本:

    echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
    

    输出:

    WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
    

    在我的bash脚本中,我一直生气,直到我刚试过:

    echo "WARNING : $warningsFound WARNINGS FOUND:
    $warningStrings"
    

    只需按Enter键即可插入该跳转 . 现在的输出是:

    WARNING : 2 WARNINGS FOUND:
    Warning, found the following local orphaned signature file:
    
  • 15

    bash 4.4 中添加了一个新的parameter expansion来解释转义序列:

    $ {parameter @ operator} - E运算符扩展是一个字符串,它是带有反斜杠转义序列的参数值,与$'...'引用机制一样 .

    $ foo='hello\nworld'
    $ echo "${foo@E}"
    hello
    world
    
  • 3

    尝试

    echo -e "hello\nworld"
    hello
    world
    

    纳米编辑为我工作 .

  • 4

    你也可以使用带括号的回声,

    $ (echo hello; echo world)
    hello
    world
    
  • 104

    POSIX 7 on echo

    http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

    -e 未定义,反斜杠是实现定义的:

    如果第一个操作数是-n,或者如果任何操作数包含<反斜杠>字符,则结果是实现定义的 .

    除非您有可选的XSI扩展名 .

    所以请改用printf

    格式操作数应用作XBD文件格式表示法中描述的格式字符串[...]

    File Format Notation

    \ n <换行>将打印位置移动到下一行的开头 .

    还要记住,Ubuntu 15.10和大多数发行版都将 echo 实现为:

    • 内置Bash: help echo

    • 独立可执行文件: which echo

    这可能会导致一些混乱 .

  • 2
    echo $'hello\nworld'
    

    版画

    hello
    world
    

    $'' 字符串使用ANSI C Quoting

    $'string'形式的单词被特别处理 . 单词扩展为字符串,替换为ANSI C标准指定的反斜杠转义字符 .

  • 2

    它适用于CentOS:

    echo -e ""hello\nworld""
    
  • 25
    str='hello\nworld'
    $ echo | sed "i$str"
    hello
    world
    
  • 1

    你总是可以做 echo "" .

    例如

    echo "Hello"
    echo ""
    echo "World"
    
  • 3

    这对我来说是用不饱和的,

    echo -e "hello\\nworld"

  • 2130

    对于那些没有使用任何这些解决方案的人来说,还有一个条目,需要从他们的函数中获取返回值:

    function foo()
    {
        local v="Dimi";
        local s="";
        .....
        s+="Some message here $v $1\n"
        .....
        echo $s
    }
    
    r=$(foo "my message");
    echo -e $r;
    

    只有这个技巧在我正在使用这个bash的linux中工作:

    GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
    

    希望它可以帮助有类似问题的人 .

  • 458

    如果有人发现自己在墙上撞击试图弄清楚为什么同事的剧本不会打印换行符,那么请注意这一点 - >

    #!/bin/bash
    function GET_RECORDS()
    {
       echo -e "starting\n the process";
    }
    
    echo $(GET_RECORDS);
    

    如上所述,该方法的实际运行本身可以包裹在回声中,该回声取代可能在该方法本身中的任何回声 . 显然我为了简洁而淡化了它,发现它并不容易!

    然后,您可以告知您的同志,执行函数的更好方法是这样的:

    #!/bin/bash
    function GET_RECORDS()
    {
       echo -e "starting\n the process";
    }
    
    GET_RECORDS;
    
  • 0

    您可以使用 printf 代替:

    printf "hello\nworld\n"
    

    printf 具有比 echo 更一致的行为 . echo 的行为在不同版本之间差异很大 .

  • 18

    这可以更好地完成

    x="\n"
    echo -ne $x
    

    -e选项将解释转义序列的后退
    -n选项将删除输出中的尾部换行符

    PS:命令echo的作用总是在输出中包含一个尾随的换行符,因此需要-n来关闭该东西(并使其不那么混乱)

  • 15

    你也可以这样做:

    echo "hello
    world"
    

    这适用于我的macOS .

相关问题