尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
深入学习Linux: 命令行参数与环境变量详解
文章目录1. 命令行参数1.1 main函数的参数1.2 命令行参数的作用2. 环境变量2.1 理解一个问题2.2 PATH环境变量2.3 其他环境变量3. C/C代码与进程之间的关系3.1 用代码获取环境变量3.1.1 main函数最多有几个参数3.1.2 shell外壳里的环境变量是哪里来的3.2 获取环境变量的若干种方法3.3 环境变量、本地变量、内建命令3.3.1 创建自己的环境变量3.4 内建命令1. 命令行参数1.1 main函数的参数main函数是可以有参数的。main函数的参数由bash和系统自动传递。命令行参数的本质是一个字符串shell以空格为分割符号切成了若干的子串。细节一命令行参数至少是1argc1argv[0]一定会有元素指向的就是程序名。细节二选项是以空格分割的字符串一个字符也是字符串。细节三argv的本质是一张表元素由argc决定argv[argc]是最后一个且始终为NULL。1.2 命令行参数的作用为什么要有命令行参数命令行参数的本质应用是为了实现一个命令可以根据不同的选项实现不同的子功能。也是Linux中所有命令选项功能的实现方式。问题VS2022有没有命令行参数有的。cat file.txt和cat file.txt如何打印出文件内容本质是通过命令行参数将文件打开打开后读文件打印内容。2. 环境变量2.1 理解一个问题环境变量具有全局属性的根本原因是环境变量可以被bash进程的子进程继承所有在Linux下的子进程都会拥有对应的环境变量。./的本质是相对路径本质是告诉OS用户要执行的bin就在当前路径下。2.2 PATH环境变量Linux怎么知道我应该去哪一个路径下找可执行程序除了去/usr/bin路径下去找还会不会去其他路径下去找Linux系统会存在所谓的环境变量的东西。PATH是该环境变量的变量名echo$PATH以冒号为分割符的多串路径告诉Linux系统如果用户执行一个可执行文件没有指明路径去哪几个路径下去找PATH的本质是协助Linux进行指令查找的环境变量。如何将路径配置到环境变量里就可以执行的时候不带有./PATH[你的路径]你这么写就直接覆盖了PATH$PATH:[你想要添加的路径]总结PATH指定命令的搜索路径。PATH环境变量是全局的。2.3 其他环境变量系统级的变量变量名和变量内容往往具有全局属性。还有没有其他环境变量查询env介绍其余环境变量echo$HISTSIZE记忆你之前使用过的命令默认是1000统计最近使用的1000条命令。echo$OLDPWD记忆用户在运行时上一次所存在的工作路径。echo$SSH_TTY记录终端文件终端窗口不一样输入重定向对内容进行重新输入。PATH指定命令的搜索路径。当你在命令行输入一个命令时系统会按照 PATH 中列出的目录顺序依次查找对应的可执行文件。HOME当前用户的主目录路径。执行cd ~或cd不带参数时就会跳转到该目录。不同用户的 HOME 不同例如/home/zhangsan或/root。SHELL当前用户所使用的 Shell 解释器的路径。常见的有/bin/bash、/bin/zsh等决定了你在终端中使用的命令解释器类型。3. C/C代码与进程之间的关系3.1 用代码获取环境变量3.1.1 main函数最多有几个参数三个参数拿到系统的环境变量表本质是将环境变量表传递给进程。有什么用不同的环境变量有不同的用途。是谁传递的怎么传递的环境变量在bash没有拿到的时候在哪里是谁传递给你的默认是在bash内部的bash本质是一个进程是存储在内存中的是临时表内存级的。我的程序都是bash进程的子进程子进程代码和数据是可以共享的是父进程传递的。所以环境变量具有全局属性。存在两张环境变量表当我们运行程序时bash会fork出一个子进程子进程可以看到父进程的参数。所以说不传参数也能看到环境变量的原因是子进程进行了继承。不传参数怎么获取环境变量子进程都是bash的子进程你可以获得bash的表子进程天然可以继承父进程的数据。语言会默认提供全局变量全局的指针可以指向环境变量表。获取环境变量的第二种方式。需要记住的是环境变量可以被获取。bash有两张表一张是命令行参数表一张是环境变量表。3.1.2 shell外壳里的环境变量是哪里来的bash的环境变量是哪里来的是从Linux系统的配置文件里面来的启动时会把配置文件加载进来所以当时你改的是内存级的数据你关掉Xshell又打开会重新从配置文件中加载。什么是配置文件配置文件又是哪里来的家目录存在两个配置文件.bashrc.bash_profile上面的两个文件其实是相关的。bash在启动时会访问.bashrc文件会将配置文件载入修改一下就可以看到bash被执行echo一行字就可以了。root怎么不执行每一个人都会有自己的家目录改的不是root的配置文件。为什么会给每个用户都搞一个bashwhile:;dopsaxj|grepbash;sleep1;donewhile:;dopsaxj|grepbash;sleep1;echo#############;done每开一个窗口就会有一个bash每个子进程都会加载一个环境变量。最常见mangetenv原理是根据名字查找环境变量的内容根据环境变量名遍历这张表并依次比较遍历成功将右边返回失败返回NULL。如何用C/C获取环境变量char *whoami getenv(USER);3.2 获取环境变量的若干种方法环境变量的作用是限制程序的执行。获取环境变量的三种做法main函数参数char* env[]C语言全局变量char** environ最佳实践getenv(name)测试限制访问用户名。3.3 环境变量、本地变量、内建命令3.3.1 创建自己的环境变量我想创建一个自己的环境变量怎么办test_env12344env|grepTEST_ENV存在但env不到这个叫本地变量。导出成环境变量本质是在将本地变量放到环境变量表里你就可以查到了exportTEST_ENV再次查询就有了。如果这个本地变量本来就没有可以用export直接导也可以exportAAAasdfghj能不能被自己的C语言程序获得getenv(TEST_ENV);子进程是可以获得父进程环境变量的环境变量是全局的本质环境变量是可以被子进程继承的。如何删除环境变量unset[环境变量名]取消命令行的环境变量本质就是将环境变量从环境变量表中删除。其实这些也都是内存级的关掉重新打开就好了。本地变量和环境变量的区别本地变量无法被子进程继承不具备全局性只在bash内部可以访问类比于局部变量和全局变量。为什么要有本地变量cnt0;while[$cnt-le100];doecho$cnt;letcnt;doneshell当中的本地变量是为了支持语法的用于保存一些临时信息。set可以查询系统变量和环境变量。如果我想让我的环境变量关掉打开后还有打开.bash_profile在里面export导入一个环境变量。3.4 内建命令提出问题本地变量只能在shell内部运行不能被子进程继承。echo子进程看不到本地变量是如何被打印的echo这个进程是怎样能打印本地变量的命令和命令是不一样的存在二进制文件级别的命令普通命令内建命令在shell内部自己定义bash自己内部的一次函数调用不依赖第三方路径。内建命令是shell自己的意味着内建命令的执行不需要环境变量。欢迎大家批评指正
RELATED

相关推荐

AI服装设计工作流拆解:从趋势聚合到Tech Pack自动输出的系统设计

AI服装设计工作流拆解:从趋势聚合到Tech Pack自动输出的系统设计

1. 背景:服装设计流程的断裂与信息损耗 在讨论AI服装设计工具之前,有必要重新审视一个服装品牌从0到1出一个新款,究竟经过哪些节点。传统链路大致如下: 趋势调研:设计师翻阅WGSN、Pinterest、Instagram、秀场图库&…

📅 2026/8/23 8:37:24
奇迹MU荣耀版本下载安装与副本通关全攻略

奇迹MU荣耀版本下载安装与副本通关全攻略

1. 奇迹MU荣耀版本入门指南作为一款运营近20年的经典MMORPG,《奇迹MU》荣耀版本在保留经典玩法的基础上,对画面、系统和副本进行了全面升级。对于新老玩家而言,掌握正确的下载安装方法和副本通关技巧至关重要。荣耀版本最显著的特点是采用了全…

📅 2026/8/24 2:07:40
50Ω阻抗标准:电子工程中的最优平衡点

50Ω阻抗标准:电子工程中的最优平衡点

1. 50Ω阻抗的历史渊源与技术标准形成在电子工程发展的早期阶段,阻抗选择呈现出明显的无序状态。二战期间的无线电设备制造商各自采用不同的阻抗值,从30Ω到90Ω不等,这导致了设备间互联的严重兼容性问题。1940年代后期,美国军方成…

📅 2026/9/10 5:43:14
MORE NEWS

更多资讯

📰

Golang核心特性与高并发实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

低代码平台DIY模块开发:uniapp+vue3实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

DeepSeek-MoE-16b-chat 基于 Transformers 的双卡显存部署与推理调用实战

DeepSeek-MoE-16b-chat 基于 Transformers 的双卡显存部署与推理调用实战 【免费下载链接】self-llm 《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型…

📰

170+本极客时间电子书都躺在这一个仓库里,你先该读哪本?

170本极客时间电子书都躺在这一个仓库里,你先该读哪本? 【免费下载链接】geektime-books :books: 极客时间电子书 项目地址: https://gitcode.com/GitHub_Trending/ge/geektime-books 这个叫 geektime-books 的开源仓库里,整整齐齐躺着…

📰

如何用 k3d 搭建本地 Kubernetes 集群部署并测试 Homepage

如何用 k3d 搭建本地 Kubernetes 集群部署并测试 Homepage 【免费下载链接】homepage A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations. 项目地址: https://gitcode.com/GitHub_Trending/ho/homepage …

📰

安卓期末大作业点餐平台App:架构设计与答辩高分指南

简介:面向Android课程设计与期末大作业的高分参考项目,内容为点餐平台App完整源码,附带文档说明与作业报告,适合需要完成安卓期末大作业、课程设计或想了解完整项目结构的学生参考。压缩包内共303个文件,大小91.74MB&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬