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
)
하지만 더 좋은 방법이 있을 것 같아요