GNU/Linux >> Linux の 問題 >  >> Linux

Bashスクリプティング–例を使用して説明されたPrintfコマンド

この記事では、 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ヒアドキュメントチュートリアル

Linux
  1. Linuxのshutdownコマンドを例で説明

  2. Linux Tracerouteコマンド、例を使用して説明

  3. Bash の「test」コマンドでの「&&」と「&」の比較

  1. 例を使用したBashヒアドキュメントチュートリアル

  2. Linuxカットコマンドを6つの例で説明

  3. Bashprintfコマンド

  1. Linuxのlddコマンドを例で説明

  2. Linuxの例で説明されたBashエコーコマンド

  3. Bashスクリプティング–ループが例で説明されている間とまで