将多行字符串回放到文件bash中

时间:2016-09-01 16:54:27

标签: bash

我想在我的bash脚本中回显一些带有换行符的文本到文件中。我可以做echo -e "line1 \n line2 \n"但是当文本变得很长时,这将变得不可读。我尝试使用换行符进行以下操作:

echo -e "[general]\
    state_file = /var/lib/awslogs/agent-state\
    [/var/log/messages]\
    file = /var/log/messages\
    log_group_name = /var/log/messages\
    log_stream_name = {ip_address}\
    datetime_format = %b %d %H:%M:%S\

然而,在插入文本时,没有添加换行符,因此整个内容都在一行上。无论如何使用换行符回显文本同时使bash脚本可读?

1 个答案:

答案 0 :(得分:7)

如果您想使用echo,请执行以下操作:

echo '[general]
state_file = /var/lib/awslogs/agent-state
[/var/log/messages]
file = /var/log/messages
log_group_name = /var/log/messages
log_stream_name = {ip_address}
datetime_format = %b %d %H:%M:%S'

即。用引号括起整个字符串,不要试图逃避换行符。它看起来不像是要扩展字符串中的任何shell参数,因此请使用单引号。

或者,为此目的使用heredoc是很常见的:

cat <<EOF
[general]
state_file = /var/lib/awslogs/agent-state
[/var/log/messages]
file = /var/log/messages
log_group_name = /var/log/messages
log_stream_name = {ip_address}
datetime_format = %b %d %H:%M:%S
EOF

请注意,在这种情况下将扩展shell参数。使用bash,您可以在第一行使用<<'EOF'代替<<EOF来避免这种情况。