Linux--命令行参数和环境变量

目录

一,引言

二,命令行参数

三,环境变量


一,引言

本节大致讲解一下在Linux中命令行参数是如何实现。以及环境变量的概念,如何查找环境变量等等。

二,命令行参数

在Linux中,当使用ls,touch等等指令,会发现这些指令后面跟着-a ,-l等选项。在Linux中是如何实现的呢。在C语言中main函数通常来说是程序的窗口,但实际上来说, 在main函数之上还有_start函数,这函数的主要功能就是调用main函数。在平时的main函数的参数列表中是不需要参数的。但是实际上main函数是可以进行传参数的如图:

cpp 复制代码
int main(int argc, char *argv[], char *env[])
{
    return 0;
}

argv字符串数组,内部存储一个个字符串。当程序运行时,argv负责接收外部的命令行参数。argc是命令行参数的个数。举个例子如下:

cpp 复制代码
int main(int argc, char* argv[])
{
    printf("参数总个数:%d\n", argc);
    
    // 2. 遍历打印所有参数
    for (int i = 0; i < argc; i++) 
    {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
}

这也就是实现了指令的选项功能。根据不同的选项来实现不同功能。

而main函数的第三个参数,就是这个进程的环境变量列表。

三,环境变量

在使用系统命令是会发现不管是ls,还是touch等等,这些指令并不需要指定路径就可以进行运行,也就是说ls如何找到自己所在的运行位置。那么系统是如何找到这个指令的具体位置呢,这是就要引入环境变量的概念。Linux--进程优先级和进程切换-CSDN博客

在操作系统执行某个程序是会先在系统的环境变量中去查找这个程序的位置。而在操作系统借助环境变量来实现程序的查找。

首先来看一下如何查看系统中的环境变量:

cpp 复制代码
env

env显示系统的所有环境变量。

在程序运行,bash会首先搜索环境变量,在对应的环境变量中会有对应的地址,之后根据这个地址就找到需要执行的程序位置。

查看环境变量具体内容:

cpp 复制代码
echo $指令

如下:

通常来说一个指令会先经过bash创建命令行参数表,对这个命令进行解析,解析结束之后,对这个命令识别,找对应的环境参数表,找到对应的地址进行运行。

通过export可以对环境变量进行写入。unset对环境变量进行删除。

在代码层级上有三种方法获取环境变量

1,environ--注意这个变量提前声明。

2,getenv--返回环境变量的数据,类型是char*

3,子进程会继承父进程的环境变量

此外环境变量具有全局特性 ,因此也就说明可以被继承。在bash中还要一种在命令行的变量叫做本地变量,不会被子进程所继承。只能由bash自己运行。

相关推荐
wanhengidc1 天前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
有谁看见我的剑了?1 天前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
JoyCong19981 天前
ToDesk远程屏幕墙技术白皮书:如何重塑全局运维视界
运维·电脑·远程工作
偶尔上线经常挺尸1 天前
《100个“反常识”经验15:Nginx 502排查:从应用到内核》
运维·nginx·性能调优·反向代理·502错误·http排错
yc_12241 天前
用 Visual Studio 远程调试 Linux:从零到流畅的完整指南
linux·ide·visual studio
思茂信息1 天前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求
计算机安禾1 天前
【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南
linux·运维·php
下一页盛夏花开1 天前
ubuntu 20中安装QT以后出现红色空心断点
linux·运维·ubuntu
金色光环1 天前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
sanshanjianke1 天前
Thunderobot 911ME 笔记本 Linux 风扇控制研究
linux