不谈命令行参数就谈环境变量就是耍流氓。
相信我们在C语言阶段都在main
函数里见过参数。
例如int main(int argc, char* argv[])
这是什么东西呢?
话不多说我们直接打印一下看看:
现象:
到此为止我们发现argv
这个数组存放着一个个指针,这些指针指向我们传入的参数。
再来看这样一段代码:
现象:
那么现在就产生两个问题:
- 为什么要有这中功能的存在?
- 谁传给我们的?
先回答第一个:
我们先来看这样一个命令:
是不是与我们刚刚进行的操作一样!!
没错,命令行参数的本质就是交给我们程序不同的选项。用来指定不同的程序功能!!
再来看第二个问题:
先说答案:是bash。
那么他是如何给我们的呢?
先来看这样一段代码:
现象:
由此可以验证子进程是可以拿到父进程的代码和数据的。
那我们父进程的父进程的谁呢,也就是父进程的ppid
就是bash,所以我们运行的二进制可执行文件就是bash的子进程,linux中大约70多的命令都是bash子进程。
那我们将二进制文件名与所带的选项给bash,bash的子进程也理所应当的可以拿到这些数据。