함수의 $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임의의 데이터에 사용할 수 없습니다.)

관련 정보