スクリプトを解釈するときに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
しかし、私はこれがあまり役に立たないとは思わない。