命令行参数和环境变量

一、命令行参数

我们能观察到主函数是有参数的 char* argv\[\] 和 argc ,系统会将命令行打散,放入argv\[\]数组中,argc表示个数

例如:ls -a -l这时候argv0为ls argv1 为-a argv2 为-l 所以选项本质就是字符串,可以以一定的方式传递给你Is内部的"main",再Is内部实现的时候,就可以根据不同的选项,实现类似功能的不同表现形式

命令行参数首先会被bash拿到,再给子进程

命令行参数至少为一。进程对应的程序名字,一般都是程序名。字串有几个(空格)argc就有几个

最后必须以NULL结尾

二、环境变量

1、历史经历

2、环境变量的定义

是系统级别的一些全局变量,具有不同的功能

3、Linux环境变量

env获取全部命令
(1)PATH

操作系统,查找可执行命令时间环境变量PATH(包含了很多路径)中查找的,例:我们执行自己的程序的时候需要带路径,但是执行ls 等系统命令的时候不用带路径 ,ls等命令中/usr/bin/中,而PATH包含/usr/bin中

echo可以打印PATH中包含的内容当你没用指明程序的路径的时候,系统会自动以:为分隔符,依次再下面的路径中寻找是否有该命令,如果都没有就会报错

验证:

当我们将myprocess的路径用export打印到环境变量中,直接使用myprocess就不会报错

4、如何多方法获取环境变量

(1)mian函数获取

其实main函数有三个变量,env是一个指针数组,一个一个的字符串,就是环境变量的K=V的字符串

(2)通过函数获取单个环境变量

getenv

(3)全局指针

environ指向环境变量表

  • 我的进程是如何获取环境变量
  • 不是你获取的环境变量表而是你的父进程(bash)获得了环境变量,形成环境变量表(是数据,子进程会继承父进程的代码和数据)
  • 总结:bash在运行的时候会形成两张表:命令行参数表(一直在变)和环境变量表(相对比较稳定){内存级的}

5、bash从哪里来的环境变量

从系统的配置文件中来

例如:

6、为什么要有环境变量

不同的环境变量,会有不同的效果作用

例:我们可以写一个只有我们自己执行的程序

  • pwd是当前路径,进程会记录来自己的工作路径(cwd)->父进程bash也有cwd->在bash进程自己的tash_struct内部保存->创建子进程,以父进程tash_struct为模板,创建。所以你自己的pwd从bash 来
  • getcwd可以获取当前的pwd
  • bash的pwd的获取是在底层调用getcwd更新环境变量
  • 修正概念:环境变量大部分从配置文件中来,也有少部分通过动态获取而来

7、环境变量的总结和特点

  • 本地变量:只在本bash中有用
  • 由上图可知环境变量会被子进程继承下去(具有全局性),本地变量不会被继承下去

8、内建命令

  • echo是命令,执行他需要创建子进程,而本地变量是不会被子进程继承的,但是echo却可以拿到子进程
  • 那是因为大部分的命令是可执行程序。需要通过创建子进程去执行,但是Linux中,有一部分的命令,执行的时候,没有风险,需要bash自己执行,我们把这种命令叫做内键命令
相关推荐
爱写代码的森2 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
大耳朵-小飞象5 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技5 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
HLC++6 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室7 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影8 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙8 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码9 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
生活爱好者!9 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
groundhappy10 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python