파이프라인 서브셸에 대해 독립적으로 환경 변수 설정

파이프라인 서브셸에 대해 독립적으로 환경 변수 설정

한동안 이 질문이 궁금했는데 항상 물어보는 걸 잊어버렸어요

다음과 같은 파이프라인이 있는 경우:

a | b

다음과 같이 환경 변수를 개별적으로 설정하는 방법이 있습니까?

x="foo" a | x="bar" b

답변1

표준은 특정 환경 설정 전에 쉘 매크로 확장이 발생하도록 정의하기 때문에 수행하려는 작업이 표준과 충돌합니다.

special shell builtinPOSIX에서는 전체 셸에 영향을 미치기 위해 선행 환경 문이 필요하므로 원하는 대로 수행할 수 있는 방법도 있습니다 . 명령 :은 다음과 같습니다 special shell builtin.

노력하다:

(x="foo" :; a) | (x="bar" :; b)

메인 셸 프로세스가 영향을 받지 않도록 하려면 이 작업을 하위 셸에서 수행해야 합니다. OP가 그의 의견에서 예상한 내용을 교체 a하고 인쇄하면 b다음과 같습니다.echo $x,

(x="foo" :; echo $x) | (x="bar" :; echo $x)

음, 파이프 왼쪽의 출력이 손실됩니다...

그러나 이미 서브쉘을 사용해야 하므로 다음을 사용할 수 있습니다.

 (x="foo"; echo $x) | (x="bar"; echo $x)

구문을 사용하여 먼저 서브쉘에서 쉘 변수를 설정한 다음 이를 사용합니다. x명령에서 환경으로 필요한 경우 export x후자의 예에서 필요합니다.

관련 정보