在 bash 和 dash 中可靠地打印带有换行符的字符串

Posted

技术标签:

【中文标题】在 bash 和 dash 中可靠地打印带有换行符的字符串【英文标题】:Print string with newline reliably in both bash and dash 【发布时间】:2013-12-08 23:39:03 【问题描述】:

我有以下脚本:

#!/bin/sh

echo "111\n111"
echo -e "222\n222"

这两个命令在 bash 和 dash 中都不起作用:

$ /bin/dash test.sh 
111
111
-e 222
222
$ /bin/bash test.sh 
111\n111
222
222

因为我无法确定 /bin/sh 是指向 bash 还是 dash,并且我无法确定 /bin/bash 或 /bin/dash 是否存在,所以这是一个真正的问题。我也无法拆分字符串并为换行添加一个“echo”,因为我需要将带有换行符的字符串通过管道传输到命令中。

有什么方法可以打印一个在所有 shell 中都有效的带有换行符的字符串?

【问题讨论】:

【参考方案1】:

printf应该更可靠:

$ printf "111\n111\n"
111
111

这应该在两个 shell 中以相同的方式工作。希望所有的贝壳。

【讨论】:

以上是关于在 bash 和 dash 中可靠地打印带有换行符的字符串的主要内容,如果未能解决你的问题,请参考以下文章

Bash 中的 Echo 换行符打印文字 \n

shell: bash和dash

Linux shell语言——dash和bash

Python如何在包含' n'的行中打印带有换行符的文本

Ubuntu系统下bash和dash的区别

shell里一个let命令,用sh跑不了,但bash可以,发现bin里面sh是dash的链接,那么sh和bash功能上啥区别