여러 구현에서 작동하는 posix 호환 방식으로 현재 정의 된 환경 변수 목록을 값 없이 인쇄하려면 어떻게 해야합니까?
일부 구현 (mksh, freebsd / bin / sh)에서는 단독으로 사용 export
하는 것이 비용에 맞습니다.
$ export
FOO2
FOO
그러나 다른 구현 (bash, zsh, dash)의 export
경우 값도 보여줍니다. bash를 사용하면 다음과 같습니다.
$ export
export FOO2='as df\
asdk=fja:\
asd=fa\
asdf'
export FOO='sjfkasjfd kjasdf:\
asdkj=fkajdsf:\
:askjfkajsf=asdfkj:\
safdkj'
$ printenv | sed -n l
FOO2=as\tdf\$
asdk=fja:\$
asd=fa\$
asdf$
FOO=sjfkasjfd kjasdf:\$
asdkj=fkajdsf:\$
\t:askjfkajsf=asdfkj:\$
safdkj$
같은 다른 옵션 env
이나 printenv
옵션이없는 적어도 아니라 리눅스와 내가 시도 FreeBSD의 플랫폼에서, 값없이 그냥 변수 이름을 인쇄합니다.
awk / sed / etc로 파이핑 또는 매개 변수 확장 기술 (예 :)을 사용하여 목록을 트리밍하는 ${foo%%=*}
것은 허용되지만 값이 =
공백이고 값에 공백이있을 수있는 값 (위의 예 참조)으로 작업해야합니다.
특정 쉘 구현에 대한 답변은 흥미 롭지 만 주로 구현 전반에서 호환되는 것을 찾고 있습니다.
export -p
이것을 사용하고 싶 습니까?
export -p
모든 POSIX 셸에서 일관된 출력을 제공 하기 때문에 사용하고 싶습니다 .
export -p
값이없는 변수 이름 만 인쇄하는 첫 번째 요구 사항에 맞지 않습니다.
export -p
. 일반적인 경우에는 값이 다음과 같은 변수가있는 경우 적절한 따옴표 구문 분석을 수행해야하기 때문에 해당 구문 분석을 작성하지 않겠습니다 hello\nexport var=value
. 모든 POSIX 셸에서 일관된 출력을 제공 하는 몇 가지 다른 명령 중 하나는 입니다 env
. 그러나 비트 가 없기 때문에 출력 을 구문 분석 하기 가 더 어렵 습니다 export =
.
export -p
POSIX에서 지정한 출력을 사용하여 셸의 입력에도 적합한 출력을 생성하십시오.