그래서 저는 다음을 테스트하고 있습니다.
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