함수의 $1이 스크립트의 첫 번째 인수를 인쇄하지 않는 이유는 무엇입니까?

함수의 $1이 스크립트의 첫 번째 인수를 인쇄하지 않는 이유는 무엇입니까?

이 간단한 bash 스크립트가 왜 인쇄되지 않습니까 echo $1?$1

#!/bin/bash
# function.sh
print_something () {
echo $1
}
print_something

$ ./function.sh 123  -> why doesn't it print '123' as a result?

답변1

위치 매개변수는 스크립트의 기본 수준에 있는 스크립트 매개변수를 참조하지만기능 매개변수함수 본문 내부. 그래서

print_something Something

실제로 인쇄됩니다 Something.

스크립트에서 함수로 인수를 전달하려면 이를 명시적으로 수행해야 합니다. 사용

print_something "$1"

첫 번째 인수를 전달하거나

print_something "$@"

이 모든 것을 통해 예제의 함수는 첫 번째 함수만 사용합니다.

답변2

이는 호출된 함수가 상위 함수/호출자의 세트와 관계없이 자체 위치 매개변수 세트를 갖기 때문입니다. 노력하다

print_something "$1"

(또한 echo "$1"참조 printf '%s\n' "$1"매개변수는 확장되므로 echo임의의 데이터와 함께 사용할 수 없다는 점을 기억하세요.)

관련 정보