1
404
Bash很不错。它接受的不仅仅是
|
2
180
Echo是如此的九十年代,充满了危险,它的使用应该会导致核心转储不低于4GB。说真的,echo的问题是Unix标准化过程最终发明了
因此,要在字符串中获得换行符,有两种方法:
|
3
66
根据其他答案我所做的是
|
4
31
我找到了
|
5
30
问题不在外壳上。问题其实出在
您还可以尝试将换行符直接插入到shell脚本中(如果您正在编写的是一个脚本),使其看起来像。。。
或同等地
|
6
21
|
7
8
|
8
4
我不是bash专家,但这个对我很有用:
我发现这样更容易格式化文本。 |
9
2
免责声明:我第一次写这个,然后偶然发现这个问题。我以为这个解决方案还没有发布,看到TLC也发布了类似的答案。不过,我张贴这是因为我希望这是一个有用的和彻底的解释。
这似乎是一个可移植的解决方案,因为它可以在相当多的shell上工作(参见注释)。
此解决方案的好处是,您不必在源代码中使用换行符,因此可以缩进 你的代码以任何你想要的方式,解决方案仍然有效。这使得它很健壮。它也是便携式的。
长答案: 上述解决方案说明:
我们可以证明变量包含实际的换行符(0x0A):
当然,除了这个答案中提出的解决方案,我们还可以使用这个(但是……):
... 但是,这种方法的健壮性较差,并且很容易因为意外地缩进代码或之后忘记删除代码而受到损坏,这使得在(缩进的)函数中使用变得不方便,而早期的解决方案是健壮的。
至于双引号:
上述解决方案的实例:
|
10
0
在我的系统(Ubuntu17.10)上,你的例子可以正常工作,无论是从命令行(into)输入
我想这回答了你的问题:它只是工作(我还没有试图弄清楚细节,比如换行符到底是在什么时候替换的
然而,我注意到同样的脚本在执行时会有不同的行为
具有
注意两边的双引号
下面还提供了所需的输出:
|
11
0
那些吹毛求疵的人只需要换行,而轻视打破缩进的多行代码,他们可以做到:
Bash(很可能还有其他shell)在命令替换之后会吞噬掉所有尾随的换行符,因此需要结束
|
12
0
|
13
0
这并不理想,但我编写了大量代码,并以类似于问题中使用的方法的方式定义了字符串。被接受的解决方案需要我重构大量的代码,所以相反,我替换了
|