如何在执行脚本时设置参数零($0)?

not*_*ser 5 shell-script

我可以使用shiftset --在解释脚本时操作位置参数。

我怎样才能改变$0

mik*_*erv 5

除了 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
Run Code Online (Sandbox Code Playgroud)

不过,我认为这不是很有用。


max*_*zig 5

在大于或等于 5 的 Bash 中,您可以$0这样更改:

$ cat bar.sh
#!/bin/bash
echo $0
BASH_ARGV0=lol
echo $0
$ ./bar.sh 
./bar.sh
lol
Run Code Online (Sandbox Code Playgroud)

ZSH 甚至支持直接分配给0

$ cat foo.zsh
#!/bin/zsh
echo $0
0=lol
echo $0
$ ./foo.zsh 
./foo.zsh
lol
Run Code Online (Sandbox Code Playgroud)