0

在我的 bash 脚本中,我使用 echo 将包含 c 样式注释的字符串通过管道传递到邮件命令中,如下所示: echo -e $EMAIL_TXT | mail -s "$SUBJECT" $RECIPIENTwhere $EMAIL_TXTcontains
"/* some text */". 在电子邮件中,我得到了根目录中所有目录的列表,因为它实际上正在评估/*为根目录中的所有目录。如何让我的脚本将其评估为字符串而不是实际命令?

4

2 回答 2

1

在周围加上引号$EMAIL_TXT

echo "$EMAIL_TXT"

关于-e

-e导致参数中的转义序列(例如\nand \techo被转换为相应的字符(在这些情况下是换行符和制表符)。如果参数包含实际的换行符和制表符,则没有必要,而且可能也不希望这样做。例如,假设这个答案是电子邮件的文本。在这种情况下,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 回答