한 줄의 환경 변수 설정 동작

한 줄의 환경 변수 설정 동작

내가 이렇게 하면:

SUMAN_DEBUG=foo echo $SUMAN_DEBUG

아무런 출력도 얻지 못해요

하지만 이렇게 하면:

SUMAN_DEBUG=foo && echo $SUMAN_DEBUG

그러면 나는 얻는다

"부자"

왜 그런 겁니까?

답변1

[이 답변은 올바르지 않습니다. 문제는 명령줄에서 변수를 할당하기 전에 발생하는 변수 확장으로 인해 발생합니다. 아래 댓글을 참조하세요. 또한 이 질문은 중복으로 선언되었으며 원래 질문에서 잘 논의되었습니다. -gt]

SUMAN_DEBUG=foo앞에 오는 명령에만 존재하는 지역 변수에 대한 지역 환경 변수 할당입니다. 두 번째 경우에는 &&명령 목록이 실행되었기 때문에 명령이 없습니다 . 귀하의 경우 첫 번째 명령은 비어 있고(따라서 환경 변수는 명령에 영향을 미치지 않음) 두 번째 명령은 실행되지만 환경 변수에 대해 설정되지 않습니다.

export변수가 전역 환경 변수가 되도록 할당에 추가할 수 있습니다 . 그러나 명령 목록이 완료된 후에도 지속됩니다.

또 다른 옵션은 전체 명령 목록을 괄호 안에 넣어 하위 쉘에서 실행하는 것입니다.

(export SUMAN_DEBUG=foo && echo $SUMAN_DEBUG)

이 경우 영구 환경 변수는 서브셸에 설정되며, 서브셸이 작업을 완료하면 환경이 사라집니다.

보다Bourneagain 쉘 매뉴얼, 부품 목록 및 정보환경더 알아보기.

답변2

명령줄에서는 ;또는 로 명령을 구분 해야 합니다 &&. 공백은 CLI 명령의 구분 기호가 아닙니다.

첫 번째 명령이 성공적으로 종료되면(종료 코드 0) &&두 번째 명령이 실행됩니다.

;두 번째 명령은 첫 번째 명령의 종료 상태에 관계없이 실행됩니다.

시험:

# a1;echo hello
bash: a1: command not found
hello
# a1 && echo hello
bash: a1: command not found

스크립트에서 첫 번째와 두 번째 명령은 \nbash에서도 인식되는 개행 문자로 구분됩니다.

관련 정보