명령이 예상대로 작동합니다.
> TEST=`uuidgen` sh -c 'echo "$TEST"'
BE6DFB7B-D872-49D7-91E6-24D01644B0A2
> echo $TEST
[empty line]
TEST
명령줄에서 로컬로 변수를 설정하고 echo 명령을 통해 이를 에코합니다 . 이 줄이 실행된 후에는 TEST
더 이상 설정되지 않습니다.
그러나 이것은
> TEST=`uuidgen` sh -c 'echo "$TEST"' && sh -c 'echo "$TEST"'
52EFFEAA-D094-4FC3-8212-6A294918E265
[empty line]
첫 번째 명령에 대해서는 변수가 설정되어 있지만 TEST
에 대해서는 &&
설정되지 않았습니다.둘 다주문하다. 이를 달성하는 가장 좋은 방법은 무엇입니까?
답변1
동일한 셸을 사용하여 두 명령을 모두 실행할 수 있습니다.
TEST=`uuidgen` sh -c 'echo "$TEST" && echo "$TEST"'
답변2
만약 너라면아니요변수 할당을 일시적으로(즉, 하나의 명령에 대해서만) 원하는 다음 별도의 줄에 할당합니다.
다양한 유형의 변수에 대한 할당의 몇 가지 예:
TEST=foo echo "$TEST"
이것은 것이다일시적으로
foo
변수에 값을 할당합니다TEST
(그리고TEST)를 다음과 같이 임시로 내보냅니다.오직그 단 하나의echo
명령. 그 후에는 이전 값(및 내보낸 상태)으로 되돌아갑니다. 값이 없으면 설정되지 않습니다.TEST=foo echo "$TEST" NEWTEST="$TEST"
이 예에서 TEST는
foo
쉘이 종료되거나(예: 로그아웃 또는 스크립트 종료) 명시적으로 설정 해제되거나 새 값이 할당될 때까지 해당 값을 가지므로 NEWTEST는 결국 TEST(foo)와 동일한 값을 갖게 됩니다.TEST는 내보내지지 않으므로 이 셸에서 실행되는 프로그램의 컨텍스트에서는 사용할 수 없습니다.
프로그램이 실행되는 환경에서 변수를 사용할 수 있도록 하려면 해당 변수를 내보내야 합니다.
예를 들어
export TEST=foo
또는:
TEST=foo export TEST
답변3
전체 쉘 세션에 대한 export TEST=bla
변수를 설정하는 데 사용됩니다.TEST
$ export TEST="coincoin"
$ echo $TEST
coincoin
$ cat test.sh
#!/bin/bash
echo "Test is ${TEST}"
$ ./test.sh
Test is coincoin