我正在使用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
答案 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