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