9
$ bash -c 'echo "0 is $0 1 is $1"' abc def
0 is abc 1 is def

$ echo 'echo "0 is $0 1 is $1"' > bashtest

$ bash bashtest abc def
0 is bashtest 1 is abc

第二次运行相当于如果我用shebang将bash测试变成shellscript然后直接运行它......

基本上我想知道为什么 abc 并不总是$1. 它$0在运行时变为bash -c.

4

1 回答 1

10

我也不知道这个。但是手册页提到了它:

-c 字符串:如果存在 -c 选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从 $0 开始。

ARGUMENTS部分有更详细的解释:

论据

如果在选项处理之后参数仍然存在,并且既没有提供 -c 也没有提供 -s 选项,则假定第一个参数是包含 shell 命令的文件的名称。如果以这种方式调用 bash,则 $0 设置为文件名,位置参数设置为其余参数。Bash 从这个文件中读取并执行命令,然后退出。Bash 的退出状态是脚本中执行的最后一个命令的退出状态。如果没有执行任何命令,则退出状态为 0。首先尝试打开当前目录中的文件,如果没有找到文件,则 shell 在 PATH 中的目录中搜索脚本。

于 2013-06-22T17:28:57.290 回答