环境变量<linux> (跑路人笔记)

前言

我们之前说Linux都可以称之为文件。我们的生成的可执行文件和cd这种命令按理都是可执行文件为什么cd这样的系统命令不需要加上./而我们运行我们的可执行程序的时候却要加上./呢?

答:系统中存在相关的环境变量,保存了这些命令程序的搜索路径

这个环境变量名叫做PATH。

PATH:

image-20220926180003328

查看方式 echo $PATH

我们的系统会在PATH路径内搜索你输入的命令,如果在PATH的内容的路径内就可以直接使用,没有找到就报错。

这就是为什么我们使用cd等指令不需要加上路径的原因。

变量

我们自己也可以创建变量

分为两种

  • 本地变量:

    • 创建方式:直接在命令行输入 aaa=100
    • 查找方式:echo $aaa 或………
  • 环境变量:

    • 创建方式:直接在命令行输入 export bbb=123
    • 查找方式:echo $bbb或env | grep bbb 或………

本地变量就是只有在本文件夹里可以使用的变量。

环境变量具有全局性可以在所有部分使用。

查看环境变量的工具

  1. echo: 显示某个变量值[重点]
  2. export: 设置一个新的环境变量[重点]
  3. env: 显示所有环境变量[重点]
  4. unset: 清除环境变量
  5. set: 显示本地定义的shell变量和环境变量

main函数的参数

main函数的两个参数。

话说为什么我们的Linux可以知道在命令后跟的选项呢?

rm -f -r 这个-f -r 是如何得到的呢?

我们其实就可以通过这main()的两个函数得到。

image-20220926232120354

image-20220926231821633

可以看出

我们的main函数保存的argc数就是保存我们的选择数量

argv是一个字符指针数组保存的是我们在命令行敲的指令。

这样我们就可以得到不同的选项我们也就可以通过不同选项给予不同的实现。


我们的main函数其实还有一个参数env

char* env[]

image-20221005121022597

这个参数保存的是当前的所有环境变量

image-20221005121339241

包括我们自己创建的环境变量。


还有一个不是main函数的参数但是是我们C语言维护的一个全局变量。

extern char** environ;

他的结尾也是一个空指针。

image-20221005122137044

和我们的main函数的env参数内容相同。

一个可以通过环境变量名得到环境变量的接口

char* getenv (const char* name);

使用getenv(“环境变量名”);

保存在<cstdlib>这个库中

比如我们想得到USER(保存用户名的环境变量)这个环境变量。

image-20221005124553453

环境变量全局性

为什么我们的环境变量具有全局性而我们的本地变量没有全局性呢?

这个我们现在只讲原因

几乎所有进程都是bash的子进程

所以当我们使用命令时及使用bash的子进程时,我们的子进程可以从父进程里继承一些东西,其中就包括了我们的环境变量,这就是我们环境变量具有全局性的原因。

而本地变量则是直接在bash内部定义的变量所以没有被继承。

但是为什么有些命令可以得到本地变量呢?

想echo和export,他们其实bash执行的命令。所以可以得到没有被继承的本地变量。这种命令叫做内建命令

因为这个全局的属性是通过子进程继承父进程的环境变量而得到的。(bash是命令行创建进程的父进程)
本地变量本质上就是bash内部定义的变量不会被子进程继承下去。
echo和export是命令如果也是子进程是无法得到本地变量的,但是echo和export其实是由bash自己执行的(调用自己的对应的函数来完成特定的功能)这种命令叫做内建命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就一个挺垃圾的跑路人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值