スクリプトを実行するときにパラメータ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

しかし、私はこれがあまり役に立たないとは思わない。

関連情報