환경 변수 값을 파일에 저장하는 가장 안전한 방법

환경 변수 값을 파일에 저장하는 가장 안전한 방법

나는 bash답변을 사용하고 있으며 가장 관심이 있지만 bash원하는 경우 다른 쉘에서 이를 수행하는 방법에 답변할 수 있습니다.

환경 변수가 있고 KEY해당 환경 변수의 값을 파일에 저장하고 싶습니다. 현재 나는하고있다

echo "${KEY}" > ./key.pem

실제로는 괜찮아 보이지만 이론적으로는 KEY=-n.

$ export KEY=-n
$ echo BEGIN "${KEY}" END
BEGIN -n END
$ echo "${KEY}" END
END$

그렇다면 단일 환경 변수의 값을 파일에 저장하는 더 좋은 방법이 있습니까? ( exportdeclare출력에 변수 이름이 포함되므로 나에게는 아무런 이점이 없습니다.)

답변1

bash나중에(스크립트로) 읽기 위해 저장한 경우 declare -p KEY파일을 다시 읽으려면 을 사용하세요. 값만 저장하고 싶다면 printf '%s\n' "$KEY"변수 데이터를 출력할 때와 동일하게 사용하세요.

그래서,

printf '%s\n' "$KEY" >key.pem

또는

printf 'BEGIN %s END\n' "$KEY" >key.pem

또는 출력해야 하는 모든 것.

-nin에 대한 유효한 옵션 때문에 문제가 발생합니다 . 같은 이유로 문자열 합계(및 그와 같은 조합)도 에서 문제를 일으킬 수 있습니다. 인수의 백슬래시 문자는 빌드 방법, 환경 또는 옵션에 따라 문제가 될 수도 있습니다.echobash-e-E-neEnebashbash

다음 Q&A에는 이러한 질문과 기타 사항이 요약되어 있습니다.

답변2

많은 시스템에는 printenv주어진 환경 변수의 내용과 개행 문자를 표준 출력으로 인쇄하는 명령이 있습니다( printenv1970년대 후반 3BSD에 등장):

printenv 'My Env Var' > file

My Env VarNL 뒤에 오는 변수의 내용은 이러한 시스템의 모든 쉘에 저장됩니다 .file

쉘 변수에 매핑되는 환경 변수(적어도 이름이 ASCII 문자 또는 밑줄로 시작하고 뒤에 0개 이상의 ASCII 문자, 숫자 또는 밑줄이 오고 쉘에서 설정한 다른 특수 변수가 아닌 변수)의 경우 Bourne- 쉘과 마찬가지로(에도 적용됨 fish) 다음 명령을 사용하여 동일한 작업을 수행할 수 있습니다.

printf '%s\n' "$ENVVAR" > file

(변수를 설정하지 않아도 빈 줄이 계속 저장됩니다 file.)

rc쉘과 유사한 경우(모든 쉘 변수는 환경 변수에 매핑됩니다) :

printf '%s\n' $ENVVAR > file
printf '%s\n' $'My Env Var' > file

(위와 같은 경고)

csh클래스 셸 에서 :

printf '%s\n' $ENVVAR:q > file

(변수가 설정되지 않으면 실패하며 재정의되지 않습니다 file.)

일부 구현/버전에는 내장되어 ksh있지 않습니다 . printf이 중에서 다음을 수행할 수도 있습니다.

print -r -- "$ENVVAR" > file

관련 정보