使用粘贴命令在电子邮件中使用换行符

时间:2018-11-22 04:20:15

标签: arrays shell email paste

我正在使用Shell脚本发送的邮件中使用粘贴命令。 控制台上的输出看起来很完美,但是邮件中的输出格式不同。如何使邮件中的格式与控制台中的格式过于相同。以下示例仅是示例。数组值是动态的。所以我不能使用html表。

#!/bin/bash

BASETABLE[0]="ABC"
BASETABLE[1]="XYZ"
WORKFLOW[0]="123"
WORKFLOW[1]="789"

paste -d' ' <(printf "\n") <(printf "\n%-12.12s\n" "${BASETABLE[@]}") <(printf "\n%s\n" "${WORKFLOW[@]}")

echo "Test" `paste -d' ' <(printf "\n") <(printf "\n%-12.12s\n" "${BASETABLE[@]}") <(printf "\n%s\n" "${WORKFLOW[@]}")` | mail -s "Test" user@xyz.com

控制台出局:

ABC          123

XYZ          789

邮件输出:

ABC 123 XYZ 789

1 个答案:

答案 0 :(得分:0)

问题是您使用了echo语句。 echo不会在未加引号的字符串中保留换行符。例如,如果我有一个包含换行符的变量:

my_variable="This is
a test"

如果我在不带引号的情况下回显它,则换行符将转换为空格:

$ echo $my_variable
This is a test

但是如果我引用变量,则会保留换行符:

$ echo "$my_variable"
This is
a test

因此,您只需在echo语句中移动右引号即可获得所需的输出,从而使其变为:

echo "Test `paste -d' ' <(printf "\n") <(printf "\n%-12.12s\n" "${BASETABLE[@]}") <(printf "\n%s\n" "${WORKFLOW[@]}")`"

这将输出:

Test
 ABC          123

 XYZ          789

代替:

Test ABC 123 XYZ 789