当前位置: 首页 > 知识库问答 >
问题:

如何在Bourne shell中回音多行字符串[重复]

诸葛砚
2023-03-14

我想创建一些脚本来填充一些模板并将它们插入到我的项目文件夹中。我想为此使用一个shell脚本,模板非常小,所以我想将它们嵌入shell脚本中。问题是echo似乎忽略了字符串中的换行符。或者字符串不包含换行符。以下是一个例子:

MY_STRING="
Hello, world! This
Is
A
Multi lined
String."

echo -e $MY_STRING

这一产出:

Hello, world! This Is A Multi lined String.

我想这里的罪魁祸首是回声。我怎样才能让它确认换行?

共有3个答案

聂宜
2023-03-14

试试这个:

echo  "$MY_STRING"
魏凡
2023-03-14

回声是如此九十年代。块上的新(POSIX)孩子是printf

 printf '%s\n' "$MY_STRING"

-e或SYSV vs BSD回声疯狂和完全控制打印内容的位置和宽度,如C中的转义序列。请大家现在开始使用printf,不要回头。

赵雅懿
2023-03-14

在变量插值周围需要双引号。

 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]、换行符和all中。

对于它的价值,也要考虑这里的文档(用<代码> CAT/CODE >,而不是<代码> ECHOR>代码>

cat <<"HERE"
foo
Bar
HERE

您还可以在here文档中插入变量。

cat <<HERE
$MY_STRING
HERE

...尽管在这种情况下,这不是你想要的。

 类似资料:
  • 我必须编写一个小程序来删除作为输入的字符串中的重音。我还必须创建一个函数,将每个带重音的字符替换为相应的不带重音的字符,我有一个循环,为main中的每个字符调用该函数: 问题是,如果我在main中提供字符串“é”作为输入,则该字符串被视为大小为2的字符串(参见下面的示例),并且上面的函数被调用两次而不是一次。此外,作为函数输入的char不是正确的。我想我在函数中遇到了相同的大小问题。这个重音不应该

  • 问题内容: 我正在尝试从PHP字符串中的字符中删除重音符号,作为使字符串在URL中可用的第一步。 我正在使用以下代码: 我期望的输出将是这样的: 但是,不是将重音字符音译,而是将它们替换为问号: 我在网上可以找到的所有内容都表明,设置语言环境将解决此问题,但是我已经这样做了。我已经检查了以下详细信息: 服务器支持我设置的语言环境(包含在产生的列表中) 服务器的iconv版本(包含在产生的列表中)支

  • 问题内容: Go是否与Python的多行字符串相似? 如果不是,编写跨多行字符串的首选方式是什么? 问题答案: 根据语言规范,您可以使用原始字符串文字,该字符串由反引号而不是双引号分隔。

  • 问题内容: 我已经开始使用LPTHW学习Python,并且开始练习16: http://learnpythonthehardway.org/book/ex16.html 并且觉得自己是个白痴,因为我无法弄清楚看似简单的“额外功劳”分配之一,但需要以下条件: 压缩为一行代码。我尝试了以下一些方法: 要么: 要么: 我只是无法让它在同一行中重写line1,line2和line3字符串。而且,我尝试了各

  • 在我的WPML- 例如,我有一个字符串,它具有以下内容: 背景:职业 姓名:武术家 字符串:武术家 法文译本:玛蒂奥艺术Pratiquants d'Arts Martiaux 然后我尝试使用GetText函数__()将字符串添加到短代码的返回值中: 但在页面(mysite/fr/careers/)上,英文名称武术家仍然出现。 在页面上,ICL_语言代码等于“fr”,因此页面知道它应该是法语的。 我