Bash
為什麼 printf 後回顯沒有顯示在新行中?
我有一個將使用
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