printf
thenコマンドを使用するコードがあります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
パスワードにバックスラッシュや文字が含まれていると機能しません。