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

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

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

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

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

인수가 필요 없이 함수를 설계했기 때문에 그게 전부입니다.

관련 정보