Bash에서 많은 수의 변수를 내보내는 방법은 무엇입니까? [복사]

Bash에서 많은 수의 변수를 내보내는 방법은 무엇입니까? [복사]

.sh저는 Bash 4.3.48(1)을 사용하고 있으며 Shebang 아래에 약 20개의 변수가 포함된 파일이 있습니다. 이 파일에는 변수만 포함되어 있습니다.

패턴은 다음과 같습니다.

x="1"
y="2"
...

이 모든 변수를 다음으로 내보내야 합니다.마른방법: 예를 들어 export20이 20개의 변수에 해당하는 대신 1이 모든 변수에 해당합니다 export.

가장 우아한 방법은 무엇입니까(가장 짧고, 가장 효율적인)~에그 파일?

사이클 for? 하나 array? 아마도 이것보다 더 간단한 것(일종의 컬렉션 설탕 구문)이 있을까요?

답변1

셸 옵션을 활성화하려면 파일 상단에서 set -a(또는 이에 상응하는 항목) 을 사용하세요. 그런 다음 (해당되는 경우) 파일 끝에 (or)를 사용하여 셸 옵션을 비활성화합니다.set -o allexportallexportset +aset +o allexportallexport

쉘 활성화 allexport옵션을 사용하면 다음과 같은 효과가 발생합니다(설명서 참조 bash).

생성되거나 수정된 ​​모든 변수나 함수에는 내보내기 속성이 부여되고 후속 명령 환경으로 내보내기 위해 표시됩니다.

set -a또는 으로 설정된 이 셸 옵션은 다음과 set -o allexport같습니다.POSIX에 정의됨sh(따라서 모든 유사한 쉘에서 사용할 수 있어야 함)

이 옵션을 켜면,출구할당이 수행되는 각 변수에 대해 속성을 설정해야 합니다. [...] 명령의 할당이 유틸리티 이름 앞에 오는 경우출구유틸리티가 완료된 후 속성은 현재 실행 환경에서 지속되어서는 안 되지만 앞의 특수 내장 유틸리티 중 하나로 인해출구빌드가 완료된 후에도 남아 있는 속성입니다. 할당이 명령의 유틸리티 이름 앞에 오지 않거나 할당이 getoptsOR 유틸리티 작업의 결과 인 read경우출구속성은 변수가 설정 해제될 때까지 지속되어야 합니다.

이 옵션이 활성화되면 설정된 변수가 내보내집니다. 즉, 환경 변수에 배치됩니다. 평소와 같이 이러한 환경 변수는 현재 쉘 환경과 이후에 생성된 모든 하위 프로세스 환경에서 사용할 수 있습니다.

이것은 당신이해야한다는 것을 의미합니다

  • 이 파일을 가져옵니다( 이 명령과 함께 셸에서 .또는 사용). 또는source
  • 이 파일의 변수에 액세스해야 하는 프로세스를 시작합니다.

답변2

트릭은 다음과 같습니다.

source <(sed 's/^/export /' file.sh)

나는 당신의 쉘이 bash와 같고 지원한다고 가정합니다.프로세스 교체

또는 파일 자체를 편집합니다.

sed -i 's/[^=]\+/export &; &/' file.sh

관련 정보