タブで区切られた2つの文字列を印刷しようとしています。私が試してみました:
echo -e 'foo\tbar'
printf '%s\t%s\n' foo bar
それらの両方が印刷します:
foo bar
2つの間の空白は実際には5つのスペースです(PuTTYでマウスを使用して出力を選択する場合)。
コマンドを入力するときにCTRL + Vを使用してTABを押しても同じ結果が得られました。
タブをタブとして強制的に印刷する正しい方法は何ですか?出力を選択して、タブを使用して別の場所にコピーできますか?
そして2番目の質問:bashがタブをスペースに展開するのはなぜですか?
更新:どうやら、これはPuTTYの問題です: https://superuser.com/questions/656838/how-to-make -PuTTY-display-tabs-within-a-file-instead-of-changeing-them-to-spaces
Ilkkachuが言ったように、これはbashの問題ではなく、出力でタブをスペースに変換するターミナルエミュレーターの問題です。
異なる端末をチェックすると、PuTTY、xterm、konsoleはタブをスペースに変換しますが、urxvtとgnome-terminalは変換しません。したがって、別の解決策は、端末を切り替えることです。
2つの間の空白は、実際には5つのスペースです。
いいえ、ちがいます。 echo
またはprintf
の出力には含まれません。
$ echo -e 'foo\tbar' | od -c
0000000 f o o \t b a r \n
0000010
タブをタブとして強制的に印刷する正しい方法は何ですか?出力を選択して、タブを使用して別の場所にコピーできますか?
これは別の問題です。シェルではなく、出力時にタブをスペースに変換するターミナルエミュレータについてです。多くの人がそうしているわけではありません。
タブ付きの出力をファイルにリダイレクトしてそこからコピーするか、出力でunexpand
を使用してスペースをタブに変換する方が簡単な場合があります。 (ただし、最初は空白がタブであったことを認識できず、可能であればすべてのタブがタブに変換されます。)もちろん、これは、出力で何をする必要があるかによって異なります。