私は "Header"というメッセージにこの行を挿入しました。
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" )