Bash関数呼び出しで「echo」と「printf」を使用する

Bash関数呼び出しで「echo」と「printf」を使用する

私が使用している単純なシェル関数呼び出しと渡したecho引数printfを印刷するコマンドがあります。私は以下を見つけました。

  1. echo印刷出力
  2. printf印刷物なし

ここで何か抜けましたか?

check_host(){
    # prints output
    echo $1

    # does not print the output
    printf $1

    }
check_host $(hostname)

ベストアンサー1

表示される関数は、最初の引数を2回印刷します。一度は改行文字を追加し、一度は印刷します。改行文字なし2番目の出力が終わったら。

たとえば、対話型 Bash シェルでは、次のような結果が得られます。

user@foo /tmp$ check_host foo
foo
foouser@foo /tmp$ 

出力は以下から来ます。printf はいそこ、同じ行にはありません。

echoとの違いは、要求しないようにすることができます(必要に応じてprintf改行文字を取得するには、型文字列で明示的に使用する必要があります)。echoecho -nprintfprintf()\nprintf

通常、単語の分離の問題を回避するには、これらの変数とコマンドの置き換えを引用する必要があります。ホスト名に問題はないかもしれませんが、値にスペースがある場合は必須です。

だから:

check_host() {
    echo "$1"
    printf "%s\n" "$1"
}
check_host "$(hostname)"

任意のデータ印刷printfも上記のフォーマット指定子を介して実行する必要があります%s。そうしないと、%データ内のすべてのシンボルが解釈されずに残りますprintf

また見なさい:なぜprintfがechoより優れているのですか?

おすすめ記事