printf 뒤의 에코가 새 줄에 나타나지 않는 이유는 무엇입니까?

printf 뒤의 에코가 새 줄에 나타나지 않는 이유는 무엇입니까?

printfthen 명령을 사용하는 코드가 있습니다 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.

답변1

echo문자열의 시작 부분이 아닌 끝 부분에 개행 문자를 출력합니다.

printf\n개행 문자로 해석되지만 \n%s출력 후가 아닌 나머지 부분 앞에 인쇄됩니다.

사용으로 인해 read -s로컬 터미널을 억제했습니다.에코또한 사용자가 누를 때 Enter입력되는 내용을 억제합니다.에코.

어쨌든, 비밀번호를 읽는 구문은 IFS= read -r passcode그렇지 않으면 $IFS비밀번호에 백슬래시나 문자가 포함되어 있으면 작동하지 않습니다.

관련 정보