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
처리할 행이 하나만 있으므로 모든 배열 값이 포함된 행 하나를 얻게 됩니다.