嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的
passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let’s go!

请添加图片描述

我的博客:yuanManGan

我的专栏:C++入门小馆 C言雅韵集 数据结构漫游记 闲言碎语小记坊 进阶数据结构 走进Linux的世界 题山采玉 领略算法真谛

在这里插入图片描述


1. 命令行参数


    1 #include <stdio.h>
    2 
    3 
    4 int main(int argc, char *argv[])
    5 {
    6 
    7                                                                                                                      
    8     return 0;                                                                                                      
    9 }

相信大家见过这个main函数带参数的情况,这个参数就是命令行参数,前者代码参数的个数,后者则是内容。

我们这样就能拿到argv数组

  1 #include <stdio.h>
  2 
  3 
  4 int main(int argc, char *argv[])
  5 {
  6     printf("argc = %d\n", argc);
  7 
  8     int i = 0;
  9     for(; i < argc; i++)
 10     {
 11         printf("argv[%d] = %s\n", i, argv[i]);
 12     }
 13                                                                                                                        
 14     return 0;
 15 }

编译运行后:
在这里插入图片描述
我们再后面加些东西试试

在这里插入图片描述
我们可以得出结论:

  1. 命令行参数至少是1,argc >= 1, argc[0]一定不为空,且指向的元素是程序名!
  2. 选项是以空格分隔开的字符串。
  3. argc个,argv[argc - 1]是最后一个,argv[argc] = NULL

我们的代码就可以变成这样:

  1 #include <stdio.h>
  2 
  3 
  4 int main(int argc, char *argv[])
  5 {
  6     printf("argc = %d\n", argc);
  7 
  8     int i = 0;
  9     for(; argv[i]; i++)                                                                                                
 10     {
 11         printf("argv[%d] = %s\n", i, argv[i]);
 12     }
 13 
 14     return 0;
 15 }

我们这个命令行参数这个操作就应用到了ls这些命令上,这些命令没有什么好神奇的就是一个可执行的二进制文件罢了,就运用到了ls加选项,很多指令都能加选项。

在这里插入图片描述


2.环境变量



引出环境变量


我们在运行一个可执行文件的时候./mycommand,为什么直接mycommand不能运行必须要加./呢?

在这里插入图片描述我们不加./系统会默认在/usr/bin/bash这个路径里找,那操作系统它自己怎么知道它应该去那个路径下找可执行程序呢?会不会还去其他路径下也找呢?

Linux下就存在一个叫环境变量的东西,比如一个PATH,这个PATH里面就是你直接输入比如ls它就会在PATH路径下去找

我们使用echo $环境变量 就能打印出该环境变量
在这里插入图片描述
我们也可以把当前路径加入到环境变量PATH中,这样就可以直接运行mycommand了。

在这里插入图片描述
我们也不用担心PATH,因为这是内存级的文件,重新进入shellPATH会还原。

那我们的环境变量是从哪里来的呢?

答:父进程。
我们的程序和命令都是bash进程的子进程,子进程代码和数据可以共享。


获取环境变量


方法和命令行参数差不多:

    1 #include<stdio.h>
    2 
    3 int main(int argc, char* argv[], char* env[])
    4 {
    5     int i = 0;
    6     for(; env[i]; i++)
    7     {
    8         printf("env[%d]: %s\n", i, env[i]);                                                                       
    9     }
   10 
   11     return 0;
   12 }

在这里插入图片描述
我们还可以通过getenv(name)的方式拿到环境变量。

printf("PATH = %s\n", getenv("PATH"));

在这里插入图片描述


本地变量,环境变量,内建命令


这个就是本地变量。在这里插入图片描述
在环境变量里面没有本地变量
在这里插入图片描述
如果你想把本地变量写入环境变量可以export 本地变量

在这里插入图片描述
反之清楚环境变量用 unset 环境变量名

由此可以看出子进程能获取父进程的环境变量,环境变量是全局的本质:环境变量可以被子进程继承
反之本地变量无法被子进程继承!不具备全局性,只在bash内部可以访问

是不是所有的命令离开了环境变量就都失效了呢?

在这里插入图片描述
我们发现有些命令离开了环境变量后依旧有效,这说明:
命令和命令是不一样的

  • 存在的二进制文件级别的命令:普通命令
  • 内建命令:在shell内部自己定义的,bash自己内部的一次函数调用。不依赖第三方路径。


在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐