![셸에서 명령 수명 변수를 설정하는 방법은 무엇입니까? [복사]](https://linux55.com/image/228811/%EC%85%B8%EC%97%90%EC%84%9C%20%EB%AA%85%EB%A0%B9%20%EC%88%98%EB%AA%85%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
답변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 명령에 대해 제안된 솔루션:
foo='hello' bash -c 'echo $foo'
: 쉘 스크립트를 사용하는 것은 바람직하지 않습니다! 간단한 명령에 대한 자세한 방법입니다.(){ local var=value; echo "1: $var"; }; echo "2: $var"
: 기능을 사용하는 것은 바람직하지 않습니다! 간단한 명령에 대한 긴 방법입니다.TEST=foo && echo $TEST
: 단순하지만 끈기있습니다.
내가 나가는 길은
(file="test"; echo $file)
서브셸을 생성하면 셸 변수를 생성하고 echo
이를 명령 내에서 사용한 다음 해당 명령 외부에서 유지되지 않습니다.