환경 변수만 에코하고 bash 함수는 에코하지 않음

환경 변수만 에코하고 bash 함수는 에코하지 않음

bash 변수는 에코하지만 bash 함수는 에코하지 않는 방법이 있나요?

나는 이것을 할 수 있다

env | grep -v 'BASH_FUNC'

그러나 일반적으로 여러 줄이므로 함수의 다른 줄이 에코됩니다.

답변1

모든 환경 변수를 나열하지만 내보낸 함수는 나열하지 않으려면 다음 안내를 따르세요.

for n in `compgen -e`; do echo "$n=${!n}"; done

compgen -e변수의 이름이 여기에 나열됩니다. echo이름과 해당 값이 출력됩니다. 값을 인용하는 ${!n@Q}대신 사용하여 ${!n}파일이나 eval.

(편집:)
참고: 배열이 포함된 경우에는 배열을 무시하는 대신 env배열 인덱스와 함께 값을 인쇄합니다. 0(연관 배열의 경우 0인덱스가 없으면 name=인쇄됩니다.)
이 문제를 처리하는 방법에 대한 단서는 다음 질문에 대한 답변을 참조하세요.이 스택 오버플로 질문.

답변2

그래서 저는 서브셸을 사용하여 이 작업을 수행하고 모든 bash 기능을 설정 해제합니다.

   (
       # in subshell

       for line in `declare -F | awk '{print $3}'`; do
          unset -f "$line"  # unset all bash funcs
       done

        env
    )

하지만 더 좋은 방법이 있을 것 같아요

관련 정보