在我的bash脚本中,我使用echo将包含c样式注释的字符串传递到mail命令中,如下所示:
echo -e $EMAIL_TXT | mail -s "$SUBJECT" $RECIPIENT
包含$EMAIL_TXT
的{{1}}
"/* some text */"
。在电子邮件中,我获取了根目录中所有目录的列表,因为它实际上将/*
视为根目录中的所有目录。如何让我的脚本将其评估为字符串而不是实际命令?
答案 0 :(得分:1)
在$EMAIL_TXT
echo "$EMAIL_TXT"
关于-e
的说明:
-e
会导致\n
的参数中的转义序列(例如\t
和echo
)转换为相应的字符(换行符和制表符,在这些情况下) )。如果参数包含实际的换行符和制表符,则没有必要,也可能不需要。例如,假设这个答案是电子邮件的文本。在这种情况下,echo -e
会将\n
转换为换行符,完全破坏了消息的意义。
bash
不会将\n
转换为换行符。所以,如果你输入:
echo "foo\nbar"
你会看到
foo\nbar
因为那是你输入的内容; bash
不转换转义序列。但是,您可以通过使用不同的引用形式来获取bash来转换转义序列:
$ echo $'foo\nbar'
foo
bar
$
当然,您也可以只添加换行符:
$ echo "foo
> bar"
foo
bar
$
答案 1 :(得分:0)
在变量周围加上引号。即。
echo -e "$EMAIL_TXT" | mail -s "$SUBJECT" $RECIPIENT
运行带有和不带引号的echo命令以查看差异。