답변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
이를 명령 내에서 사용한 다음 해당 명령 외부에서 유지되지 않습니다.