我将这几行插入到名为“标题”的邮件中。
header="
-------------------------------------
Name\tAge\tGender\tAddress
-------------------------------------
"
不幸的是,它\t
并没有像我预期的那样工作。我什至尝试将两者放在\t
两者之间``
。
然后我把它放在$header
自动电子邮件中。
mailx -s "$subject" -r "$from" "$to" <<-eof
$header
$body
$footer
eof
}
答案1
如果您使用 ANSI 字符串:
header=$'
-------------------------------------
Name\tAge\tGender\tAddress
-------------------------------------
'
您已经对变量中的所有 ANSI 转义字符进行了正确的翻译。 (注意:换行符也可以定义为\n
,但它不会增加您的情况的易读性,因此我会保留您的原始格式,如本答案中所述)。
还可以让其他工具在使用它的每个地方进行转换(同时字符串仍然包含文本表示);例如:使用echo -e
(如果您的版本echo
支持该选项),或使用变量作为格式字符串其中printf
转义符也将被解释,如:printf "$header"
。
讨论:使用的printf
优点是成为 POSIX 标准。使用 ANSI 字符串的优点是转换始终存在于变量中,并且不需要进一步解释。
由于(如更新的问题所示)变量将在程序(mailx
)的上下文中使用,该程序不会对转义字符进行解释,因此变量需要已经包含适当的格式;所以使用ANSI 字符串(ksh93
在 AIX 上)似乎是合适的解决方案。对于符合标准的解决方案,您还可以使用重新分配变量printf
,例如:header="..." ; header=$( printf "$header" )
答案2
使用\n
向标题添加换行符:
header="------------------------------------\n姓名\t年龄\t性别\t地址\n -----------------------------------\n"
然后使用例如echo -e $header
显示:
echo -e $header
-------------------------------------
Name Age Gender Address
-------------------------------------
如果echo -e
不起作用,请改用printf
。如果您的输出以破折号开头,printf -- "$header"
则调用告诉printf
将完整变量解释为输出,而不是尝试将它们解析为参数。
经过更多测试后,原始变量也适用于 printf:
header="
-------------------------------------
Name\tAge\tGender\tAddress
-------------------------------------
"
printf -- "$header"
-------------------------------------
Name Age Gender Address
-------------------------------------
要使用它,mailx
您可以使用:
mailx -s "$subject" -r "$from" "$to" <<eof
$header
$body
$footer
eof
答案3
另一种可能的选择是使用 awk:
$ echo "Name Age Gender Address" | awk -F' ' '{ printf "%s\t%s\t%s\t%s\n", $1, $2, $3, $4 }'
产生:
Name Age Gender Address
或者直接使用 printf :
$ printf "%s\t%s\t%s\t%s\t\n" Name Age Gender Address
产生:
Name Age Gender Address
答案4
从man echo
通常,您可以使用(双连字符)来区分标志和以连字符开头的字符串。由于 echo 命令不支持任何标志,因此按字面意思处理(双连字符)。
在第二个例子中:
注意:如果消息包含转义序列,则必须将其放在引号中。否则,shell 将 \(反斜杠)解释为元字符,并以不同方式对待 \。
事实上,在 AIX 上:
~> header="
-------------------------------------
Name\tAge\tGender\tAddress
-------------------------------------
"
~> echo -e $header
-e ------------------------------------- Name Age Gender Address -------------------------------------
~> echo "$header"
-------------------------------------
Name Age Gender Address
-------------------------------------