저는 배쉬를 처음 접했습니다. 이 언어에서 함수가 작동하는 방식이 혼란스럽습니다.
나는 다음 코드를 작성했습니다.
#!/usr/bin/env sh
choice_func() {
echo "$choice"
}
echo "Enter your choice:"
read choice
choice_func
내 코드를 조사하는 choice
동안 choice_func()
. 하지만 제대로 작동합니다! 함수에 입력이 주어지지 않았지만 echo
그럴 수 있다는 것이 어떻게 가능합니까?
답변1
choice
스크립트의 주요 부분에서 변수에 값을 읽습니다 . 이 변수는 전역 범위(더 나은 단어가 필요함)를 가지므로 함수 내부에서도 볼 수 있습니다.
함수 내부의 값을 읽으면 변수는 여전히 전역 범위를 가지며 함수 외부(함수 호출 후)에 표시됩니다. 이는 함수 내부 local
에서 선언하지 않는 한 마찬가지입니다 .local choice
쉘 변수의 범위 지정에 대한 자세한 내용은 다음을 참조하세요.
변수의 값을 choice
함수에 전달하려면 다음을 사용하십시오.
choice_func "$choice"
그러면 함수는 $1
첫 번째 위치 매개변수인 에서 이 값에 액세스할 수 있습니다.
choice_func () {
echo "$1"
}
또는
choice_func () {
local choice="$1"
# choice is now local and separate from the variable
# with the same name in the main script.
echo "$choice"
}
이것은 없이 함수에 값을 전달하는 적절한 방법입니다.의존쉘 스크립트의 전역 변수에 대해.
답변2
인수가 필요 없이 함수를 설계했기 때문에 그게 전부입니다.