読み取り作業の短縮

読み取り作業の短縮

これが私が現在やってreadいることで、うまく機能します。でも短縮したいです。

echo "Please save your DB root password:" && read -s dbrp
echo "Please save your DB user password:" && read -s dbup

これは私がそれを短縮しようとしましたが、完全に失敗した方法です(ヒントは私にとって重要です):

echo "Please save your DB passwords (root, then non-root):" && read -s dbrp && echo "\n" && read -s dbup

すでに私が望む方法でソートされていますが、次の理由で心が楽ではありません。

  1. read -s1つではなく2つのコマンドがあります。
  2. echo /n分割行なしで中断するには、中断行を使用する必要があります。

これを改善する方法はありますか?

修正する

私はそこを使って間違いを犯しましたecho(addに加えて\nread独自のプロンプトを追加するオプションもあります:

read -sp "What's your DB root password?" dbrp
read -sp "What's your DB user password?" dbup

答え1

変数名を変更してコードを bash 専用にしたい場合(および-sで使用可能; プロンプトのみ in のようなものを使用)、次はエレガントで簡単だと思います。zshbash-pbashzshread 'var?prompt'ksh

for arg in root user; do
    IFS= read -rsp "Please enter your $arg password: " "dbr_$arg"
    echo
done

結果$dbr_userには、sum変数にパスワードを含める必要があります$dbr_root

気づくユーザーがパスワードにバックスラッシュ、先行/末尾のスペースまたはタブを含めるように要求して-r許可します。IFS=

同等zsh

for arg (root user) IFS= read -rs "dbr_$arg?Please enter your $arg password: "

関連情報