셸에서 명령 수명 변수를 설정하는 방법은 무엇입니까? [복사]

셸에서 명령 수명 변수를 설정하는 방법은 무엇입니까? [복사]

다음 예를 고려하십시오.

file="test" echo $file

내 생각은 file명령 기간 동안만 지속되는 것 입니다 echo $file. $file이 명령 이후에는 지속되지 않지만 설정 되지 않은 echo것처럼 아무것도 인쇄되지 않습니다 .$file

명령의 수명 동안 유효한 변수를 셸에서 설정할 수 있습니까?

편집하다: 제안된 대로 쉘 스크립트나 함수를 사용하고 싶지 않습니다.모두 이것들 관련된 질문

답변1

명령줄에서 변수 바인딩은 명령줄이 실행될 때까지 발생하지 않습니다. 그러나 $file명령이 확장될 때 매개변수 대체가 발생하며 이는 실행 전에 발생해야 합니다.

이 문제에 대한 해결책은 명령을 함수에 넣는 것입니다.

fun()
{
   echo "file = " $file
}

file=abc fun

답변2

주문하다

file="test" echo $file

출력이 되지 않습니다 test.명령을 실행하기 전에 확장이 발생합니다.. 이것을 살펴보십시오:

$ set -x
$ foo='hello' echo $foo
+ foo=hello
+ echo

쉘 명령 대신 Unix 쉘 스크립트를 실행하면 같은 일이 발생하지 않습니다. 예를 들어,

foo='hello' /path/to/script.sh

이 경우 foo='hello'할당이 먼저 해결된 후 /path/to/script.sh실행됩니다.

일부더 일찍그리고관련된 우편영구 변수 할당 + CLI 명령에 대해 제안된 솔루션:

  1. foo='hello' bash -c 'echo $foo': 쉘 스크립트를 사용하는 것은 바람직하지 않습니다! 간단한 명령에 대한 자세한 방법입니다.
  2. (){ local var=value; echo "1: $var"; }; echo "2: $var": 기능을 사용하는 것은 바람직하지 않습니다! 간단한 명령에 대한 긴 방법입니다.
  3. TEST=foo && echo $TEST: 단순하지만 끈기있습니다.

내가 나가는 길은

(file="test"; echo $file)

서브셸을 생성하면 셸 변수를 생성하고 echo이를 명령 내에서 사용한 다음 해당 명령 외부에서 유지되지 않습니다.

관련 정보