다음과 같이 환경 변수를 앞에 추가하여 명령에 전달할 수 있다는 것을 알고 있습니다.
env_variable=value command
그런데 오늘 실수로 &&
변수와 명령 사이에 다음을 추가했습니다.
env_variable=value && command exactly
^
^
올바른 접근 방식과 어떻게 다른지 궁금합니다. 를 사용하여 명령을 함께 연결할 수 있다는 것을 알고 있습니다 &&
.그런데 흥미로운 점은 명령이 변수를 수신하지 않는다는 것입니다. 이유는 무엇입니까?누군가 두 번째 변형이 첫 번째 변형과 정확히 어떻게 다른지, 그리고 왜 명령에 변수가 표시되지 않는지 설명할 수 있다면 감사하겠습니다. 감사해요
답변1
foo=bar && somecmd
거의 같습니다(작업이 실패할 가능성이 적으므로).
foo=bar; somecmd
(별도의 줄에)와 동일
foo=bar
somecmd
그러면 명명된 쉘 변수에 값이 할당되고 foo
명령이 실행됩니다 somecmd
. ed foo
가 아닌 경우 export
(기본적으로 쉘 변수는 아님) 에 표시되지 않지만 somecmd
동일한 쉘에서 사용할 수 있습니다.
예를 들어 참조하십시오.
답변2
이전 명령이 모두 성공적으로 실행되는 경우 &&를 통해 명령을 한 줄로 연결하여 순차적으로 실행할 수 있습니다. 각각은 있는 그대로 셸 내에서 실행되며 셸을 수정하지 않습니다. 따라서 각 프로세스는 실행되는 셸에서 환경 변수를 얻습니다.
$ LC_ALL=C && commandB
--> LC_ALL=C 실행, 쉘에 0이 반환되면 commandB 실행(기본 쉘 환경 사용)
$ LC_ALL=C commandA
--> LC_ALL 변수를 C로 설정하고 commandA를 실행하여 환경을 변경합니다(이 명령을 효과적으로 실행).