다음 샘플 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"