"echo" 대신 "printf '%s\n'" 문을 사용하는 이유는 무엇입니까? 저는 쉘 스크립팅이 처음이므로 이해하도록 도와주세요.

"echo" 대신 "printf '%s\n'" 문을 사용하는 이유는 무엇입니까? 저는 쉘 스크립팅이 처음이므로 이해하도록 도와주세요.
secondLarge=`printf '%s\n' "${array[@]}" | sort -n | tail -2 | head -1`

두 번째로 큰 숫자를 얻으려고 하면 얻지만, 얻으려고 하면 echo얻지 못합니다. 이해하도록 도와주세요

secondLarge=`echo "${array[@]}" | sort -n | tail -2 | head -1`

답변1

GNU 버전 printf(일반적으로 에 설치됨 /usr/bin/printf)과 동일한 이름의 Bash 내장 버전은 모두 %형식 문자열에서 -expandos보다 더 많은 인수를 전달하는 경우 루프처럼 작동합니다.

반면:

declare -a array=( a b c )

그 다음에:

printf '%s\n' "${array[@]}"

다음과 다소 동일합니다.

for x in "${array[@]}"
do
    echo $x
done

위의 두 가지 모두 다음과 같은 결과를 생성합니다.

a
b
c

비교해 보면:

echo "${array[@]}"

다음을 생성합니다.

a b c

파이프라인은 출력을 정렬한 다음 두 번째에서 마지막 행을 가져옵니다. 예제 에서는 printf배열의 각 요소가 자체 줄에 인쇄되므로 배열에서 두 번째로 큰 숫자 값이 표시됩니다. 를 사용하면 echo처리할 행이 하나만 있으므로 모든 배열 값이 포함된 행 하나를 얻게 됩니다.

관련 정보