这是我当前的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
它已经按照我的意愿排在一行,但我对此感到不舒服,因为:
- 有两个
read -s
命令,而不是只有一个。 - 我必须使用
echo /n
打破行,而我想打破没有它。
有什么办法可以改善这一点吗?
更新
我在那里使用时犯了一个错误echo
(除了添加\n
. Asread
有它自己的提示添加选项:
read -sp "What's your DB root password?" dbrp
read -sp "What's your DB user password?" dbup
答案1
如果您愿意更改变量的名称并使您的代码特定于 bash(在和-s
中可用;对于提示仅,使用类似 in 的方式),我认为以下内容是优雅且简单的:zsh
bash
-p
bash
zsh
read 'var?prompt'
ksh
for arg in root user; do
IFS= read -rsp "Please enter your $arg password: " "dbr_$arg"
echo
done
结果应该在变量$dbr_user
和 中包含您的密码$dbr_root
。
注意你需要-r
和IFS=
允许用户在密码中包含反斜杠或前导/尾随空格或制表符。
等价zsh
的:
for arg (root user) IFS= read -rs "dbr_$arg?Please enter your $arg password: "