什么是$ as argv在linux中的特殊含义

时间:2017-09-07 03:17:40

标签: linux shell

我在centos 6.5上写了一个简单的c应用程序和测试,代码如下

int main(int argc, char *argv[]) {
    fprintf(stderr, "%s\n", argv[1]);
    return 0;
}

当我使用./test $运行应用时,打印值为$,但如果我使用./test $$运行,则打印值更改为119688,是$linux的特殊含义,我发现它在Windows上运行正常。

1 个答案:

答案 0 :(得分:2)

$$是当前流程' ID:

[mhawke@localhost-localdomain ~]$ echo $$
10062
[mhawke@localhost-localdomain ~]$ ps -ef | grep bash
mhawke   10062 10056  0 10:48 pts/0    00:00:00 bash

当您从命令行运行程序时,shell将$$替换为进程ID,并且您的程序将其作为第一个参数接收。

要将$$传递给您的程序,只需将其用单引号括起来:

[mhawke@localhost-localdomain ~]$ ./test '$$'

来自bash手册页:

  

BASHPID

     

扩展到当前bash进程的进程ID。这在某些情况下与$$不同,例如子壳   不需要重新初始化bash。