【问题标题】:what's the special meaning of $ as argv in linux [duplicate]linux中$ as argv的特殊含义是什么[重复]
【发布时间】:2018-02-15 15:46:06
【问题描述】:

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

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

当我使用./test $运行应用程序时,打印值为$,但如果我使用./test $$运行,打印值变为119688$在@中的任何特殊含义987654328@,我发现它在 windows 上可以正常工作。

【问题讨论】:

标签: linux shell


【解决方案1】:

$$是当前进程的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。在某些情况下,这与 $$ 不同,例如子shell 不需要重新初始化 bash。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2022-01-14
    • 2012-03-24
    • 2016-04-01
    • 1970-01-01
    相关资源
    最近更新 更多