저는 배쉬를 처음 접했습니다. 이 언어에서 함수가 어떻게 작동하는지 혼란스럽습니다.
나는 다음 코드를 작성했습니다.
#!/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
매개 변수를 사용하지 않도록 함수를 설계했기 때문입니다.