.sh
저는 Bash 4.3.48(1)을 사용하고 있으며 Shebang 아래에 약 20개의 변수가 포함된 파일이 있습니다. 이 파일에는 변수만 포함되어 있습니다.
패턴은 다음과 같습니다.
x="1"
y="2"
...
이 모든 변수를 다음으로 내보내야 합니다.마른방법: 예를 들어 export
20이 20개의 변수에 해당하는 대신 1이 모든 변수에 해당합니다 export
.
가장 우아한 방법은 무엇입니까(가장 짧고, 가장 효율적인)~에그 파일?
사이클 for
? 하나 array
? 아마도 이것보다 더 간단한 것(일종의 컬렉션 설탕 구문)이 있을까요?
답변1
셸 옵션을 활성화하려면 파일 상단에서 set -a
(또는 이에 상응하는 항목) 을 사용하세요. 그런 다음 (해당되는 경우) 파일 끝에 (or)를 사용하여 셸 옵션을 비활성화합니다.set -o allexport
allexport
set +a
set +o allexport
allexport
쉘 활성화 allexport
옵션을 사용하면 다음과 같은 효과가 발생합니다(설명서 참조 bash
).
생성되거나 수정된 모든 변수나 함수에는 내보내기 속성이 부여되고 후속 명령 환경으로 내보내기 위해 표시됩니다.
set -a
또는 으로 설정된 이 셸 옵션은 다음과 set -o allexport
같습니다.POSIX에 정의됨sh
(따라서 모든 유사한 쉘에서 사용할 수 있어야 함)
이 옵션을 켜면,출구할당이 수행되는 각 변수에 대해 속성을 설정해야 합니다. [...] 명령의 할당이 유틸리티 이름 앞에 오는 경우출구유틸리티가 완료된 후 속성은 현재 실행 환경에서 지속되어서는 안 되지만 앞의 특수 내장 유틸리티 중 하나로 인해출구빌드가 완료된 후에도 남아 있는 속성입니다. 할당이 명령의 유틸리티 이름 앞에 오지 않거나 할당이
getopts
OR 유틸리티 작업의 결과 인read
경우출구속성은 변수가 설정 해제될 때까지 지속되어야 합니다.
이 옵션이 활성화되면 설정된 변수가 내보내집니다. 즉, 환경 변수에 배치됩니다. 평소와 같이 이러한 환경 변수는 현재 쉘 환경과 이후에 생성된 모든 하위 프로세스 환경에서 사용할 수 있습니다.
이것은 당신이해야한다는 것을 의미합니다
- 이 파일을 가져옵니다( 이 명령과 함께 셸에서
.
또는 사용). 또는source
- 이 파일의 변수에 액세스해야 하는 프로세스를 시작합니다.
답변2
트릭은 다음과 같습니다.
source <(sed 's/^/export /' file.sh)
나는 당신의 쉘이 bash와 같고 지원한다고 가정합니다.프로세스 교체
또는 파일 자체를 편집합니다.
sed -i 's/[^=]\+/export &; &/' file.sh