bash의 명령에 환경 변수 전달

bash의 명령에 환경 변수 전달

다음 샘플 bash 명령이 있습니다.

FILE='/tmp/1.txt' echo "file: $FILE"

출력은 다음과 같습니다

file:

출력에 이전에 정의된 변수 FILE이 포함되지 않는 이유는 무엇입니까?

답변1

당신이 달릴 때

FILE='/tmp/1.txt' echo "file: $FILE"

쉘은 할당을 수행하기 전에 $FILE 변수를 확장하므로 이전에 FILE이 설정되지 않았다고 가정하면 다음을 얻습니다.

FILE='/tmp/1.txt' echo "file: "

먼저 FILE을 알려진 값으로 설정하여 이 동작을 확인할 수 있습니다.

FILE="foo"
FILE='/tmp/1.txt' echo "file: $FILE"

두 번째 줄은 다음과 같이 확장됩니다.

FILE='/tmp/1.txt' echo "file: foo"

그런 다음 이 명령의 컨텍스트 내에서 FILE 값이 /tmp/1.txt. 그런 다음 쉘이 실행됩니다.echo "file: foo"

@admstg가 답변에서 언급했듯이 다음을 수행할 수 있습니다.

FILE='/tmp/1.txt'; echo "file: $FILE"

그러나 동작은 처음에 시도한 것과 다릅니다. 처음에는 echo 명령 중에만 FILE을 설정합니다. 위 코드는 셸 기간 동안(또는 명시적으로 설정 해제될 때까지) FILE을 설정합니다.

답변2

이 두 명령을 ;로 구분해야 합니다. 변수를 정의하려면 변수를 호출하세요.

동일한 셸에서 변수를 호출할 때 변수를 내보낼 필요가 없습니다.

이것은 작동합니다:

FILE='/tmp/TEST.txt' ;  echo "file : $FILE"

관련 정보