如何在Bourne shell中打印多行字符串
如何在Bourne shell中打印多行字符串
这个问题已经有答案了:
我想创建一些脚本,用于填充一些模板并将它们插入到我的项目文件夹中。我想要使用一个shell脚本实现这个目的,并且这些模板非常小,所以我想将它们嵌入到shell脚本中。问题是echo
似乎忽略了我的字符串中的换行符。或者,该字符串本来就不包含换行符。这是一个例子:
MY_STRING=" Hello, world! This Is A Multi lined String." echo -e $MY_STRING
这将输出:
Hello,world!这是一个多行字符串。
我假设是echo
的错。那么我该如何让它识别换行符?
admin 更改状态以发布 2023年5月21日
在变量插值周围需要双引号。
echo -e "$MY_STRING"
这是一种非常普遍的错误。您应该养成总是引用字符串的习惯,除非您特别需要将其分成以空格分隔的令牌或者需要扩展通配符。
因此,为了明确,当Shell解析您的命令行时,它将规范化空白。如果您编写一个简单的C程序,它将打印出它的argv
数组,您可以看到这一点。
argv[0]='Hello,' argv[1]='world!' argv[2]='This' argv[3]='Is' argv[4]='A' argv[5]='Multi' argv[6]='lined' argv[7]='String.'
相比之下,使用引号,整个字符串都在argv[0]
中,包括换行符。
值得一提的是,还要考虑这里的文档(使用cat
而不是echo
):
cat <<"HERE" foo Bar HERE
您还可以在这里的文档中插入变量。
cat <
...尽管在这种特定情况下,这几乎不是您想要的。