我想在我的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脚本可读?
答案 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
来避免这种情况。