変数のタブが機能しない

変数のタブが機能しない

私は "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"

ディスカッション:使用はprintfPOSIX標準になるという利点があります。 ANSI文字列を使用すると、変換が常に変数に存在し、追加の説明が必要ないという利点があります。

(更新された質問からわかるように)変数はmailxエスケープ文字を解釈しないプログラム()のコンテキストで使用されるため、変数にはすでに適切な型が含まれている必要があります。ANSI文字列ksh93AIXの場合)が適切なソリューションのようです。標準に準拠したソリューションでは、再割り当て変数を使用することもできますprintf。たとえば、次のようになります。header="..." ; header=$( printf "$header" )

おすすめ記事