나는 bash
답변을 사용하고 있으며 가장 관심이 있지만 bash
원하는 경우 다른 쉘에서 이를 수행하는 방법에 답변할 수 있습니다.
환경 변수가 있고 KEY
해당 환경 변수의 값을 파일에 저장하고 싶습니다. 현재 나는하고있다
echo "${KEY}" > ./key.pem
실제로는 괜찮아 보이지만 이론적으로는 KEY=-n
.
$ export KEY=-n
$ echo BEGIN "${KEY}" END
BEGIN -n END
$ echo "${KEY}" END
END$
그렇다면 단일 환경 변수의 값을 파일에 저장하는 더 좋은 방법이 있습니까? ( export
및 declare
출력에 변수 이름이 포함되므로 나에게는 아무런 이점이 없습니다.)
답변1
bash
나중에(스크립트로) 읽기 위해 저장한 경우 declare -p KEY
파일을 다시 읽으려면 을 사용하세요. 값만 저장하고 싶다면 printf '%s\n' "$KEY"
변수 데이터를 출력할 때와 동일하게 사용하세요.
그래서,
printf '%s\n' "$KEY" >key.pem
또는
printf 'BEGIN %s END\n' "$KEY" >key.pem
또는 출력해야 하는 모든 것.
-n
in에 대한 유효한 옵션 때문에 문제가 발생합니다 . 같은 이유로 문자열 합계(및 그와 같은 조합)도 에서 문제를 일으킬 수 있습니다. 인수의 백슬래시 문자는 빌드 방법, 환경 또는 옵션에 따라 문제가 될 수도 있습니다.echo
bash
-e
-E
-neEne
bash
bash
다음 Q&A에는 이러한 질문과 기타 사항이 요약되어 있습니다.
답변2
많은 시스템에는 printenv
주어진 환경 변수의 내용과 개행 문자를 표준 출력으로 인쇄하는 명령이 있습니다( printenv
1970년대 후반 3BSD에 등장):
printenv 'My Env Var' > file
My Env Var
NL 뒤에 오는 변수의 내용은 이러한 시스템의 모든 쉘에 저장됩니다 .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