printfの後ろのエコーが新しい行に現れないのはなぜですか?

printfの後ろのエコーが新しい行に現れないのはなぜですか?

printfthenコマンドを使用するコードがありますecho。私の理解によると、echo改行はデフォルトで発生しますが、後で使用するときは発生しませんprintf。コードは次のとおりです。

#!/bin/bash
function login
{
  printf "\n%s" "Please enter ${1} password: "
  read -s passcode
}
for i in root admin; do login $i; done
echo "just something"

"\n%s"このループでは複数のユーザーを使用できるため、このコードでは重要です。出力は次のとおりです。

[root@host ]# /tmp/test.sh

Please enter root password:
Please enter admin password: just something
[root@host ]#

ループの後ろを追加して新しい行を作成するとecho ""簡単に解決できることがわかりましたが、ループがあるprintf間に機能する理由とそれ以降は機能しない理由が何であるか疑問に思いますecho

答え1

echo文字列の先頭ではなく末尾に改行文字を出力します。

printf\n改行文字として解釈されますが、\n%s出力後ではなく残りの部分の前に印刷されます。

使用によりread -sローカル端末を抑制しました。エコまた、ユーザーが押したときにEnter入力される内容を抑制します。エコ

とにかく、パスワードを読み取る構文は、IFS= read -r passcodeそうでなければ$IFSパスワードにバックスラッシュや文字が含まれていると機能しません。

関連情報