일반적으로 $0스크립트에서 스크립트 이름 또는 호출 된 모든 경로 (경로 포함)로 설정됩니다. 그러나 옵션 bash과 함께 사용 하면 명령 문자열 다음에 전달되는 첫 번째 인수로 설정됩니다.-c$0
bash -c 'echo $0 ' foo bar
# foo
실제로 위치 매개 변수가 이동 된 것처럼 보이지만을 포함 $0합니다. 그러나 shift명령 문자열에서 $0(정상적으로) 영향을 미치지 않습니다 .
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
왜 명령 문자열에 대해 이상한 행동입니까? 나는 그런 이상한 행동을 구현 한 이유, 이유를 찾고 있습니다.
그러한 명령 문자열 $0에는 일반적으로 정의 된대로 매개 변수 가 필요하지 않다고 추측 할 수 있으므로 경제성을 위해 일반 인수에도 사용됩니다. 그러나이 경우 동작 shift이 이상합니다. 또 다른 가능성은 $0프로그램의 동작을 정의하는 데 사용되는 (la bash라고 sh또는 vim호출이라고 함 vi) $0여기서는 명령 문자열에서만 볼 수 있으며 프로그램 내에서 호출 된 프로그램에서는 볼 수 없기 때문입니다. 에 대한 다른 용도를 생각할 수 없으므로 이에 대해 설명하지 못했습니다 $0.
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *,하지만, 불행하게도, $0일반적으로 설정 가능한 매개 변수없는 -stream 옵션 ... 같은 방법으로 많은 사용할 수 있습니다 xargs일반적으로 생각입니다. 그리고 다른 사람.
--. 그러면 다른 프로그램에서 볼 수 있듯이 '여기부터 인수를 시작합니다'라는 일반적인 해석이 있었을 것입니다. 그리고 다시, 그것은 실제로 그 해석을 가지고 -c있다고 생각 하는 것에 익숙하지 않은 사람들을 혼동 할 수 있습니다 --.
-에 대한$0처럼 관용구 등의 인수를sh -c 'foo $1 $2' - a b. 이 방법은 꽤 평범 해 보입니다 (한 번-의미 하는 것을 알게되면 )