更好地解释一个例子。我正在围绕mail命令编写一个简单的包装器(我的.bashrc中的一个函数)。
这是我当前无法正常工作的功能:
function email_me() { echo "$@" | mail -s "\"$@\"" myaddress@email.com; }
这是我想要的用法 - 这会发送主题和正文设置为testing 1 2 3
的电子邮件。注意我特别不想手动输入引号。
~$ email_me testing 1 2 3
因此我希望字符串替换发生如下:
echo "testing 1 2 3" | mail -s "testing 1 2 3" myaddress@email.com
然而,无论我尝试什么,就好像-s参数没有引号一样,并且通过电子邮件将主题为"testing
的电子邮件发送给以下收件人:1,2,3,和myaddress@email.com
如何让-s参数将“测试1 2 3”视为单个字符串?
答案 0 :(得分:3)
我建议使用
function email_me() { printf %s\\n "$*" | mail -s "$*" myaddress@email.com; }
"$*"
确实是一个包含所有参数的特殊变量,在一个字符串中printf
代替echo
可以帮助您避免使用-n
-e
以及echo
支持的任何其他内容。但是,在某些情况下,您必须引用email_me
的参数以避免通配并保留空格:
email_me 2 * 2 = 4
[sends you all file names in current directory]
email_me a b
[sends "a b" with only one space]