![함수는 아직 수신되지 않은 입력 값을 에코할 수 있습니다.](https://linux55.com/image/170747/%ED%95%A8%EC%88%98%EB%8A%94%20%EC%95%84%EC%A7%81%20%EC%88%98%EC%8B%A0%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EC%9E%85%EB%A0%A5%20%EA%B0%92%EC%9D%84%20%EC%97%90%EC%BD%94%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 배쉬를 처음 접했습니다. 이 언어에서 함수가 어떻게 작동하는지 혼란스럽습니다.
나는 다음 코드를 작성했습니다.
#!/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
매개 변수를 사용하지 않도록 함수를 설계했기 때문입니다.