함수는 아직 수신되지 않은 입력 값을 에코할 수 있습니다.

함수는 아직 수신되지 않은 입력 값을 에코할 수 있습니다.

저는 배쉬를 처음 접했습니다. 이 언어에서 함수가 어떻게 작동하는지 혼란스럽습니다.

나는 다음 코드를 작성했습니다.

#!/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

매개 변수를 사용하지 않도록 함수를 설계했기 때문입니다.

관련 정보