올바른 이스케이프를 사용하여 선택한 환경 변수 내보내기

올바른 이스케이프를 사용하여 선택한 환경 변수 내보내기

대시 스크립트에 설정된 일부 환경 변수를 파일로 내보내고 싶습니다.

myvariable="line 1

LINE=3
some characters: # \" \$
line 5"
myvariable2="abc"
export myvariable myvariable2

예상 결과(사용 가능한 스크립트):

declare -x myvariable="line 1

LINE=3
some characters: # \" \$
line 5"
declare -x myvariable2="abc"

결과는 export이 명령을 사용하여 얻은 것입니다. 그러나 모든 환경 변수를 내보내고 필터링을 허용하지 않습니다. 변수의 여러 줄 문자로 인해 결과를 계산할 수 없습니다 grep.

이에 비해 이 printenv명령은 선택한 변수만 출력할 수 있지만 이스케이프는 고려하지 않으며, 이 사용 사례에서는 변수 이름을 출력하지 않습니다.

답변1

또는 .zshyash

export -p myvariable myvariable2

예상대로 작동합니다.

그렇지 않은 경우에도 에서 bash다음을 수행할 수 있습니다.

for var in myvariable myvariable2; do
  printf 'export %s=%q\n' "$var" "${!var}"
done

POSIXly에서는 다음을 사용하여 수동으로 참조할 수 있습니다 awk.

awk -v q="'" '
  function escape(v) {
    gsub(q, q "\\" q q, v)
    return q v q
  }
  BEGIN {
    for (i = 1; i < ARGC; i++)
      print "export " ARGV[i] "=" escape(ENVIRON[ARGV[i]])
  }' myvariable myvariable2

bash재미를 위해 일부 쉘( , zsh, mksh, , ksh93, not ) 에서 작동하는 해키 솔루션입니다 .yashdash

 (PS4=; set -x; export "myvariable=$myvariable") 2>&1

관련 정보