printf
我有一个将使用然后命令的代码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 ]#
我知道通过在循环后面添加 aecho ""
可以简单地修复并创建一个新行,但我想知道为什么在循环时printf
它可以工作,为什么不可以在echo
之后呢?
答案1
echo
在字符串末尾而不是开头输出换行符。
printf
解释\n
为换行符,但\n%s
在输出的其余部分之前而不是之后打印换行符。
由于使用read -s
,我们抑制了本地终端回声当用户按下 时Enter,也会抑制正在键入的内容回声。
无论如何,读取密码的语法应该是IFS= read -r passcode
,否则如果密码包含反斜杠或$IFS
字符,它将无法正常工作。