在我的 bash 脚本中,我使用 echo 将包含 c 样式注释的字符串通过管道传递到邮件命令中,如下所示:
echo -e $EMAIL_TXT | mail -s "$SUBJECT" $RECIPIENT
where $EMAIL_TXT
contains
"/* some text */"
. 在电子邮件中,我得到了根目录中所有目录的列表,因为它实际上正在评估/*
为根目录中的所有目录。如何让我的脚本将其评估为字符串而不是实际命令?
问问题
340 次
2 回答
1
在周围加上引号$EMAIL_TXT
echo "$EMAIL_TXT"
关于-e
:
-e
导致参数中的转义序列(例如\n
and \t
)echo
被转换为相应的字符(在这些情况下是换行符和制表符)。如果参数包含实际的换行符和制表符,则没有必要,而且可能也不希望这样做。例如,假设这个答案是电子邮件的文本。在这种情况下,echo -e
会将\n
's 转换为换行符,从而完全破坏消息的意义。
bash
除非在一种特定情况下,否则不会转换\n
为换行符。因此,如果您键入:
echo "foo\nbar"
你会看到的
foo\nbar
因为那是你输入的;bash
不转换转义序列。但是,您可以使用不同的引号形式让 bash 转换转义序列:
$ echo $'foo\nbar'
foo
bar
$
当然,你也可以只包含一个换行符:
$ echo "foo
> bar"
foo
bar
$
于 2013-07-01T15:22:29.707 回答
0
在变量周围加上引号。IE
echo -e "$EMAIL_TXT" | mail -s "$SUBJECT" $RECIPIENT
只运行带引号和不带引号的 echo 命令以查看差异。
于 2013-07-01T15:25:49.283 回答