bash 특수 매개변수 $@는 printf에서 루프로 간주됩니까?

bash 특수 매개변수 $@는 printf에서 루프로 간주됩니까?

그래서 저는 다음을 테스트하고 있습니다.

foo() {  
  printf "\nAll the parameters, each on a separate line:\n"  
  printf "param: %s\n" "$@"  
}  

foo The "nicely colored" rainbow  

출력은 다음과 같습니다

All the parameters:  
param: The
param: nicely colored
param: rainbow

따라서 올바르게 이해했다면 IFS로 설정한 이후 \t\n인수는 탭(의 첫 번째 문자 IFS)으로 구분됩니다.
그런데 왜 별도의 줄로 인쇄합니까?
printf는 각 인수에 대해 실행됩니다. 즉, bash는 이를 for 루프로 변환합니까?
다음(큰따옴표 제외)도 동일한 결과를 출력합니다.

printf "param: %s\n" $@

답변1

printf여기서 일어나는 일은 위치 형식 매개변수(및 기타 항목)보다 더 많은 인수를 전달하면 %s형식이 반복된다는 것입니다. \n형식 문자열에 있는 것처럼 여러 줄에 걸쳐 반복됩니다 . 이 경우에는 특별한 것이 없습니다 $@.

예를 들어:

$ printf 'Foo: %s\n' bar baz
Foo: bar
Foo: baz

$ printf 'Foo: %s %s\n' bar baz
Foo: bar baz

관련 정보