この記事では、 Bash printfの基本的な使用法について説明します。 Linuxでの例を使用したコマンド。この記事の終わりまでに、Bashシェルスクリプトでprintfコマンドを快適に使用できるようになります。
bashprintfコマンド
バッシュ は、出力を端末に出力するために使用できる2種類のコマンドを提供します。 1つはエコーです 主にこの目的で使用されるコマンド。 2つ目はprintfです コマンド。
Printf
printf関数に似ています C 言語ですが、独自の機能セットを備えています。 echo
の主な違い およびprintf
コマンドはそのprintf
echo
と比較してフォーマットと追加機能を提供します 指図。
echo
を使用したことがない場合 コマンドの前に、それについての詳細な記事がありますので、ご覧ください。
- Linuxの例で説明されているBashEchoコマンド
Printf
はシェルビルトインですが、printf
の外部コマンドもあります。 。組み込みは外部コマンドよりも優先されます。この情報は、type
以下に示すコマンド。
$ type -a printf printf is a shell builtin printf is /usr/bin/printf printf is /bin/printf
type
の詳細については コマンドについては、次のガイドを参照してください:
- 初心者向けの例を含むタイプコマンドチュートリアル
printf
の外部バージョンを実行する場合 、バイナリが存在する完全なディレクトリパスを指す必要があります。
$ printf "Hello World\n" # SHELL BUILTIN
$ /usr/bin/printf "Hello World\n" # EXTERNAL VERSION OF PRINTF
Bashprintfヘルプを表示する
前のセクションで述べたように、printf
bashが組み込まれています。 bash
を開く必要があります マニュアルページを開き、printf
に移動します セクション。
$ man bash
/printf → presss
次のコマンドを実行して、printf
のヘルプセクションを表示することもできます。 bash
から マニュアルページ。
$ man bash | less --pattern='^ *printf +['
printfコマンドの基本形式
例を通して、printf
を比較します echo
を使用 共通性を理解するためのコマンド。
以下はprintf
のフォーマットです コマンド:
printf [-v var] format [arguments]
引数はprintf
に渡す必要があります そうしないと、下の画像に示すように失敗します。
$ printf
$ echo $?
引数を渡し、printf
を実行します もう一度コマンドします。以下の例から、改行文字である\nを追加したことがわかります。デフォルトでは、printf
echo
のような新しい行は追加されません コマンドなので、\n
を追加する必要があります 。
$ printf "Linux is fun to work with" # WITHOUT NEW LINE
$ printf "Linux is fun to work with\n" # WITH NEW LINE
変数とコマンドの解釈
printf
内で任意の変数を囲んだり、コマンドを実行したりできます 声明。この動作はecho
に似ています コマンド。
$ VAR1="Linux"
$ printf "$VAR1 is fun to work with\n"
推奨される読み物:
- Bashスクリプティング–例で説明されている変数
一重引用符と二重引用符の動作
引数を一重引用符で囲むと、変数とコマンドはプレーンテキストとして扱われます。これは、echo
でも同じ動作です。 コマンドも。変数とコマンドを展開する場合は、引数を二重引用符で囲む必要があります。
$ printf '$VAR1 is fun to work with\n'
$ printf 'Today date = $(date)\n'
引用符なしで引数を渡す場合、printf
最初の単語のみを引数と見なして出力します。したがって、printf
を引用符で囲みます 必要です。
$ printf Today date = $(date)\n
出力のリダイレクトとパイピング
デフォルトでは、printf
出力をstdout(ターミナル)に送信します。 リダイレクト演算子を使用して、出力をファイルにリダイレクトできます または、パイプ演算子と組み合わせます さらなる処理のために。
# PRINT TO STDOUT $ printf "Today date = $(date)\n"
# REDIRECT TO A FILE $ printf "Today date = $(date)\n" > /tmp/tdy.txt $ cat /tmp/tdy.txt
# PIPE $ printf "Today date = $(date)\n" | grep -i -o IST
関連記事:
- 例を使用して説明されたBashリダイレクト
出力を変数に割り当てる
printf
を保存したい場合があります 変数に出力し、後でいくつかの処理に使用します。通常、printf
を実行します コマンドを実行し、出力を変数に割り当てる角かっこで囲まれています。
$ ZONE=$(printf "Today date = $(date)\n" | grep -i -o IST)
$ printf $ZONE
または、-v
を使用することもできます printf
と一緒にフラグを立てる 出力を変数に格納します。 -v
の後に変数名を渡す必要があります フラグ。
$ printf -v TIME "Today date = $(date)\n" $ echo $TIME
MultiLineprintfステートメント
印刷する行が複数ある場合は、テキストを二重引用符で囲むことができます。同様に、1行として印刷する巨大な行があり、コードを読みやすくするために複数行で行を記述したい場合は、各行の終わりにバックスラッシュを使用して、次の行を次の行と見なすことができます。前の行への続き。
$ printf "\n I am running PoP_OS
It is a great OS
With Great features\n"
$ printf "I am running pop_os \
It is a great OS \
With Great features\n"
バックスラッシュエスケープ文字
printf
では、次の円記号でエスケープされた文字を使用できます 。
- 改行文字(\ n)
- [水平]タブ(\ t)と[垂直]タブ(\ v)
- バックスペース文字(\ b)
- キャリッジリターン(\ r)
例を挙げて1つずつ説明しましょう。
改行文字(\ n)
改行文字についてはすでに見てきました(\n
)前のすべてのセクション。改行文字(\n
)新しい行を追加します。
$ printf "Today date = $(date)\n"
水平タブ(\ t)と垂直タブ(\ v)
水平および垂直のタブ文字は、printf
にタブスペースを追加するために使用されます 引数。
$ printf "Today date \t $(date)\n" # HORIZONTAL TAB
$ printf "Today date \v $(date)\n" # VERTICAL TAB
バックスペース文字(\ b)
バックスペース文字(\b
)1文字を削除します。これは、キーボードからBackspaceキーを押すようなものです。
$ printf "It's a rain\by day..\n"
キャリッジリターン(\ r)
キャリッジリターン(\r
)時に、カーソルは最初の位置に戻ります。 ) 使用されている。 \r
の後に来るものは何でも 最初の位置から文字を置き換えます。
$ printf "It's a rain\by\r day..\n"
バックスラッシュ文字(\)をエスケープします
特殊文字をエスケープする場合(\n
、\t
、\v
、\b
、\r
)そしてそれを文字列のように扱い、接頭辞として二重の円記号(\\
)を付けます 。
$ printf "It's a rain\\by\\r day..\n"
これまでに見たものは何でも、echo
で同じ一連の操作を見つけることができます コマンドも。 echo
をすでに知っている場合 コマンド、この時点で、printf
に非常に慣れているはずです。 コマンドも。
Printfフォーマット指定子
フォーマット指定子は、printf
の値を置き換える方法です。 printf
に値をハードコーディングする代わりに 。置換に使用される文字は多数あり、各文字は特定のデータ型を表します。指定子を使用する場合は、接頭辞として %
を付ける必要があります シンボル。一般的に使用されるフォーマット指定子のいくつかを見てみましょう。
文字列指定子(%s)
printf
内に文字列を配置する場合 、%s
を使用する必要があります 。以下の例を見てください。 printf
があります ステートメントと値を"United"に置き換えたい printf
内 。したがって、%s
文字列指定子であるが使用され、コマンドを実行すると値 "united" %s
の代わりに使用されます 。
$ printf "++ Manchester %s has a strong lineup this season" "United"
必要な数の置換引数を渡すことができ、引数内で同じ数の指定子を使用する必要があります。
$ printf "++ %s %s has a strong lineup this %s" "Manchester" "United" "season"の強力なラインナップを持っています
使用する指定子が少なく、引数が多い場合はどうなりますか?
以下の例を見てください。最初に1つの指定子だけを使用し、置換する3つの引数(文字列)を渡しました。 printf
の方法 これを処理すると、最初の指定子の最初の引数の置換が開始され、他の指定子がないため、次の引数が再び最初の指定子に渡されます。このようにして、実際には正しくない3つの置換が発生し、必要な結果が得られます。
$ printf "++ %s United has a strong lineup this Season\n" "Manchester" "United" "season"
この動作が理にかなっているいくつかのユースケースがあります。以下の例を見てください。一部のプレイヤーへのウェルカムメッセージを印刷し、引数として名前を渡したいと思います。通常、名前のリストを配列に格納し、配列をループしてメッセージを出力できます。ただし、これはループの使用を回避することで結果を達成するための効果的な方法です。
$ printf "++ Welcome %s to manchester united\n" "Ronaldo" "Varane" "Jadon Sancho\n" ++ Welcome Ronaldo to manchester united ++ Welcome Varane to manchester united ++ Welcome Jadon Sancho to manchester united
符号付き10進整数(%d)および符号なし10進整数(%u)
歌われた整数を置き換えるには、%d
を使用します 。
$ printf ">> Welcome %s to manchester united - You get shirt number - %d\n" "Ronaldo" 7 "Varane" 19 "Jadon Sancho" 25
符号なし整数を置き換えるには、%u
を使用します 。
$ printf "UNSIGNED INTEGER = %u\n" 10
整数以外のデータ型に置き換えようとすると、エラーが発生します。
$ printf ">> Ronaldo gets no %d\n" seven
浮動小数点数(%f)
浮動小数点数を置き換えるには、%f
を使用します 。
$ printf "Integer 100 to floating-point %f\n" 100
バックスラッシュエスケープシーケンスの解釈
バックスラッシュエスケープシーケンスを引数として渡し、%b
を使用できます。 バックスラッシュエスケープシーケンスを解釈して拡張します。
$ printf "Welcome to %b Manchester united %b" "\v" "\n"
Printf変換ディレクティブ
printf
のフォーマットに使用できるオプションの変換修飾子があります 出力。
%[flags][width][.precision]specifier
幅モディファイア
幅修飾子は、変換する最小文字数を決定します。文字数が少ない場合は、以下のようにスペースの接頭辞が付きます。
$ printf "%10s\n" "Ronaldo"
上の画像を見ると、指定子(ロナウド)は 7 文字と私は幅を10に指定しました 。この場合、幅を揃えるためにスペースが追加されます 10 。
フラグ修飾子を使用して、配置を正当化するか、スペースの代わりにゼロを追加することもできます。たとえば、出力を左揃えにする必要がある場合は、ハイフン(-
)を追加できます。 )フラグ修飾子。
$ printf "%-10s\n" "Ronaldo"
整数値と浮動小数点値の場合、スペースをゼロに置き換えることができます ゼロ(0)フラグ修飾子を追加します。
$ printf "%010d \n" 7
精密モディファイア
これは、印刷する文字列、整数、および浮動小数点位置の数を決定するために使用できるオプションのパラメーターです。 dot(。)を使用する必要があります 印刷する位置の数を決定する整数が続きます。
以下の例を見てください。文字列指定子を使用していて、精度修飾子を4に設定しています。
$ printf "%.7s\n" "Ronaldo has joined Manu"
アスタリスク(*
)は、高精度の整数値の代わりに渡すことができます。アスタリスクは、精度値をハードコーディングする代わりに、精度の引数を受け入れます。
$ printf "%.*s\n" 7 "Ronaldo has joined Manu"
結論
この記事では、Bashprintfコマンドに関するかなりの情報を取り上げました。 printf
を使用するには 快適に、記事に記載されているすべての例を練習してください。 Printfは、この記事で示した例よりもはるかに強力なフォーマットです。基本に慣れている場合は、ユースケースに応じてprintf
を使用できます。 効率的に。
関連記事:
- Bashスクリプティング–例を使用して説明されたインデックス付き配列
- Bashスクリプティング–例を使用して説明された連想配列
- Bashスクリプティング–ループの説明中およびループまで
- Bashスクリプティング–例で説明されているForループ
- Bashスクリプト–例で説明されている関数
- 初心者向けのBashヒアドキュメントチュートリアル