Bashスクリプトでタブ文字をエコー
この記事では、Bash スクリプトを使用するときに 1つまたは複数の tab
文字を echo
する方法について説明します。
Bashスクリプトでタブ文字をエコー
echo
コマンドは単純です: ターミナルに渡されたものを表示します。 通常、変数を次のように保存すると:
example=' 'testing
コマンド echo '['$example']'
を使用してこの変数を出力しようとすると、次の出力が得られます。
[ testing]
これは、変数に入力または保存したものではありません。 上記の例では、tab
文字を 2 回使用しましたが、表示されるのは 1つのスペースだけです。
この動作は、すべてのシェルで一貫しているわけではないことに注意してください。 たとえば、zsh
シェルで同じスクリプトを実行すると、次の出力が得られると予想されます。
[ testing]
Bash スクリプトに戻ると、これを回避する方法がいくつかあります。
-e
フラグを使用する
-e
フラグは バックスラッシュ エスケープの解釈を有効にする
を意味します。 上記と同じ例を書くとしたら、次のように書きます。
example='\t\t'testing
echo -e '['$example']'
出力は次のとおりです。
[ testing]
\t
の部分はタブを表しています。 したがって、2つのタブを導入したかったので、\t\t
と記述しました。
-e
フラグが渡されると、\t
記号はタブとして解釈され、必要に応じて表示されます。
次の場合のように -e
フラグが使用されていない場合、\t
はリテラル文字列として読み取られ、タブとして処理されません。
example='\t\t'testing
echo '['$example']'
出力は次のとおりです。
[\t\ttesting]
フラグを渡すことは POSIX ではないことに注意してください。 したがって、フラグが実装されていない make
のように、これを移植して使用することはできません。 したがって、ほぼ普遍的な printf
を含むいくつかの代替案について説明します。
もちろん、この部分は私たちが始めたものから少し外れています。なぜなら、私たちは echo
を完全に放棄するからです.
二重引用符を使用する
これは間違いなく最も単純なソリューションであり、構文以外の説明は必要ありません。 コマンドは次のように記述します。
example=' 'testing
echo "[$example]"
結果は次のようになります。
[ testing]
代わりに printf
を使用してください
これは、3つのソリューションの中で最も移植性が高く、最も推奨されます。 echo
には多くの実装とバージョンがありますが、printf
はほとんど同じです。
どこで個別に実装されていても、非常によく似た実装です。 上記のメソッドのバリエーションは、zsh
を使用して呼び出された場合は同じ出力になりますが、bash
を使用して呼び出された場合は異なるため、これを見ることができます。
printf
を使用するための構文を以下に定義します。
example=' 'x
printf '%s\n' "[$example]"
出力は次のとおりです。
[ x]
一般的な推奨事項として、必要な出力が hello
のような単純なテキストである限り、echo
は正常に機能しますが、複雑なものでは、echo
を使用すると、シェル間で動作が大きく異なる可能性があるため、扱いにくい場合があります。 そのようなすべての場合 (特殊文字など) では、代わりに printf
を使用することをお勧めします。
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn