명령줄에서 환경 변수를 설정하고 두 명령에 영향을 미치도록 합니다.

명령줄에서 환경 변수를 설정하고 두 명령에 영향을 미치도록 합니다.

명령이 예상대로 작동합니다.

> 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

만약 너라면아니요변수 할당을 일시적으로(즉, 하나의 명령에 대해서만) 원하는 다음 별도의 줄에 할당합니다.

다양한 유형의 변수에 대한 할당의 몇 가지 예:

  1. TEST=foo echo "$TEST"
    

    이것은 것이다일시적으로foo변수에 값을 할당합니다 TEST(그리고TEST)를 다음과 같이 임시로 내보냅니다.오직그 단 하나의 echo명령. 그 후에는 이전 값(및 내보낸 상태)으로 되돌아갑니다. 값이 없으면 설정되지 않습니다.

  2. TEST=foo
    echo "$TEST"
    NEWTEST="$TEST"
    

    이 예에서 TEST는 foo쉘이 종료되거나(예: 로그아웃 또는 스크립트 종료) 명시적으로 설정 해제되거나 새 값이 할당될 때까지 해당 값을 가지므로 NEWTEST는 결국 TEST(foo)와 동일한 값을 갖게 됩니다.

    TEST는 내보내지지 않으므로 이 셸에서 실행되는 프로그램의 컨텍스트에서는 사용할 수 없습니다.

  3. 프로그램이 실행되는 환경에서 변수를 사용할 수 있도록 하려면 해당 변수를 내보내야 합니다.

    예를 들어

    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

관련 정보