變數中的選項卡不起作用
我有這些行,我將在名為“header”的郵件中插入這些行。
header=" ------------------------------------- Name\tAge\tGender\tAddress ------------------------------------- "
不幸的是,它
\t
並沒有像我預期的那樣工作。我什至試圖把這兩者\t
之間````。然後我把它
$header
放在自動電子郵件中。mailx -s "$subject" -r "$from" "$to" <<-eof $header $body $footer eof }
使用
\n
向標題添加換行符:header="————————————-\n姓名\tAge\tGender\tAddress\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
如果您使用 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" )