我有一个变量FOO
,需要为我分配一个多行的值。像这样的东西,
FOO="This is line 1
This is line 2
This is line 3"
因此,当我打印FOO
的值时,它应该提供以下输出。
echo $FOO
output:
This is line 1
This is line 2
This is line 3
此外,行数将动态决定,因为我将使用循环初始化它。
主要使用read -d
的其他问题中显示的答案不适合我,因为我正在进行密集的字符串操作,而且代码格式也很重要。
答案 0 :(得分:26)
不要缩进线条,否则你会获得额外的空间。展开"$FOO"
时使用引号以确保保留换行符。
$ FOO="This is line 1
This is line 2
This is line 3"
$ echo "$FOO"
This is line 1
This is line 2
This is line 3
另一种方法是使用\n
转义序列。它们在$'...'
字符串中解释。
$ FOO=$'This is line 1\nThis is line 2\nThis is line 3'
$ echo "$FOO"
第三种方法是存储字符\
和n
,然后让echo -e
解释转义序列。这是一个微妙的差异。重要的是\n
不在常规引号内解释。
$ FOO='This is line 1\nThis is line 2\nThis is line 3'
$ echo -e "$FOO"
This is line 1
This is line 2
This is line 3
如果删除-e
选项并让echo
打印原始字符串而不解释任何内容,您可以看到我正在做出的区别。
$ echo "$FOO"
This is line 1\nThis is line 2\nThis is line 3
答案 1 :(得分:4)
初始化FOO
时,您应该使用换行符:\n
。
FOO="This is line 1\nThis is line 2\nThis is line 3"
然后使用echo -e
输出FOO
。
请务必注意
的明智话语\n
内的"..."
不是换行符,而是文字\
,后跟文字n
。只有在echo -e
解释时,才会将此文字序列转换为换行符。 - 来自mklement0
#!/bin/bash
FOO="This is line 1\nThis is line 2\nThis is line 3"
echo -e $FOO
Output:
This is line 1
This is line 2
This is line 3
答案 2 :(得分:0)
您还可以使用读取的行将行存储到变量中:
$ read -r -d '' FOO << EOF
This is line 1
This is line 2
This is line 3
EOF
要查看打印换行符,请在变量周围使用引号:({echo "$FOO"
而不是echo $FOO
)
$ echo "$FOO"
This is line 1
This is line 2
This is line 3