Bash

為什麼 printf 後回顯沒有顯示在新行中?

  • February 11, 2020

我有一個將使用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

引用自:https://unix.stackexchange.com/questions/566758