为什么 printf 之后的 echo 不显示在新行中?

为什么 printf 之后的 echo 不显示在新行中?

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字符,它将无法正常工作。

相关内容