bash -c有不同的参数语义($ 1变成$ 0!)

时间:2013-06-22 17:25:04

标签: bash

$ 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

第二次运行相当于如果我将bash测试变成带有shebang的shellcript然后直接运行...

基本上我想知道为什么abc并不总是$1。使用$0时,它会变为bash -c

1 个答案:

答案 0 :(得分:10)

我也不知道这一点。但是man page提到了它:

  

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

ARGUMENTS部分有更详细的解释:

  

ARGUMENTS

     

如果参数处理后仍然存在参数,则-c和-c都不存在   -s选项已被提供,第一个参数被假定为   包含shell命令的文件的名称。如果在此调用bash   时尚,$ 0设置为文件的名称,并且位置参数 -   ters设置为其余参数。 Bash读取并执行com-   来自此文件的mands,然后退出。 Bash的退出状态是退出状态   在脚本中执行的最后一个命令的tus。如果没有命令   执行后,退出状态为0.首先尝试打开   文件在当前目录中,如果没有找到文件,那么shell   在PATH中的目录中搜索脚本。