스크립트를 실행할 때 매개변수 0($0)을 어떻게 설정합니까?

스크립트를 실행할 때 매개변수 0($0)을 어떻게 설정합니까?

스크립트를 해석할 때 shift위치 매개변수를 사용하거나 조작 할 수 있습니다.set --

어떻게 바꿀 수 있나요 $0?

답변1

5보다 크거나 같은 Bash에서는 $0다음과 같이 변경할 수 있습니다.

$ cat bar.sh
#!/bin/bash
echo $0
BASH_ARGV0=lol
echo $0
$ ./bar.sh 
./bar.sh
lol

ZSH는 다음에 대한 직접 할당도 지원합니다 0.

$ cat foo.zsh
#!/bin/zsh
echo $0
0=lol
echo $0
$ ./foo.zsh 
./foo.zsh
lol

답변2

Stephane이 이미 언급한 것 외에도 제가 생각할 수 있는 유일한 다른 방법은 sh프로세스를 호출하는 것입니다. 즉, 함수가 스크립트일 수도 있다는 의미입니다. 하지만 여전히 관심이 있다면:

fn() { sh -c "$(cat)" arg0 "$@" ; } <<\FNDEF
    echo "My argv0 is $0 and my positionals are..."
    printf %s\\n "$@"
#END
FNDEF
fn arg1 arg2 arg3 
###OUTPUT###
My argv0 is arg0 and my positionals are...
arg1
arg2
arg3

그러나 나는 이것이 그다지 유용하다고 생각하지 않습니다.

관련 정보