使用echo来管道带有C样式注释的字符串

时间:2013-07-01 15:20:42

标签: bash echo

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

2 个答案:

答案 0 :(得分:1)

$EMAIL_TXT

附近加上引号
echo "$EMAIL_TXT"

关于-e的说明:

-e会导致\n的参数中的转义序列(例如\techo)转换为相应的字符(换行符和制表符,在这些情况下) )。如果参数包含实际的换行符和制表符,则没有必要,也可能不需要。例如,假设这个答案是电子邮件的文本。在这种情况下,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命令以查看差异。