Linux_环境变量_命令行参数

news2024/11/30 2:40:30

一.环境变量

在Linux中自己写的程序必须要带路径才能运行,相对路径或是绝对路径,但是像ls pwd这样的程序,不带路径也能运行。
image.png
当你想要运行一个程序时:

  1. 如果带有路径的话,则直接将对应路径的程序加载进内存,变为进程,执行代码。
  2. 如果不带路径的话,则操作系统会去系统默认路径下搜索,没有找到则报错。

这个系统默认路径就是PATH环境变量,它里面存放了一些经常需要执行的命令路径,有了环境变量后,我们执行程序时,不用加路径,操作系统也能找到对应的位置。
像ls,touch这样的命令,它的路径已经存放在了对应的PATH环境变量里,我们自己写的程序的路径没有在PATH中,所以在查找时,找不到就报错了。只要将我们写的程序地址,加入到PATH环境变量里,就不会报错了。

1.1 概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
  • 环境变量本质上是shell进程内部的一张表,当启动shell时,从用户的配置文件读取信息,初始化环境变量表

image.png

  • 同时,在命令行中可以创建shell本地变量

image.png

1.2 查看环境变量

1.2.1 echo 查看某个环境变量

image.png

1.2.2 env 查看环境变量

image.png

  • PATH :系统默认搜索路径
  • LOGNAME:登录SHELL的用户
  • USER:当前正在使用的用户
1.2.3 set 查看本地变量和环境变量

image.png

1.2.4 unset 取消本地变量和环境变量

image.png

1.2.5 export 将本地变量导入环境变量表中

image.png

1.2.6 putenv
  • 防止putenv里面出现指针问题。防止指针内容改变导致环境变量一直变化

1.3 代码中使用环境变量

在bash上运行的程序都是bash的子进程,在创建子进程时,父进程将它的环境变量表传递到子进程中,所以子进程可以访问环境变量表,这也说明了环境变量表具有全局属性,但是bash中的本地变量不能传递给子进程,只能在bash内部使用。

  1. 使用main函数参数来获取

env是一个指针数组,是一个环境变量表,最后一个位置总是为NULL,所以结束的判断为env[i]

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

  1. 使用全局变量environ来获取
    1 #include<stdio.h>
    2 #include<unistd.h>
    3 #include<stdlib.h>
    4 
W>  5 int main()
    6 {
    7   extern char** environ;
    8 
    9   for (int i = 0; environ[i]; ++i)
   10   {
   11     printf("environ[%d], %s\n", i, environ[i]);                                                                                                                                                            
   12   }
   13   return 0;
   14 }
   15 

  1. 使用函数获取(推荐)

上述两种方法需要程序员自己遍历环境变量表来获取对应的环境变量,使用不方便,使用函数获取更为简单。
image.png

    1 #include<stdio.h>
    2 #include<unistd.h>
    3 #include<stdlib.h>
    4 
W>  5 int main()
    6 {
    7   char* path = getenv("PATH");
        // putenv 可以导入环境变量
    8   if (path != NULL)                                                                                                                                                                                        
    9   {
   10     printf("%s\n", path);
   11   }
   12   return 0;
   13 }
   14   

二.命令行参数

main参数一般有三个int main(int argc, char* argv[], char* env[])

  • argv:指针数组,类似于env环境变量表,存放的是一个个字符串,最后一个位置是NULL
  • argc:表示argv里面有几个字符串
    1 #include<stdio.h>
    2 #include<unistd.h>
    3 #include<stdlib.h>
    4 
W>  5 int main(int argc, char* argv[], char* env[])
    6 {
    7   int i = 0;                                                                                                                                                         
    8   for (; i < argc; ++i)
    9   {
   10     printf("argv[%d]->%s\n", i, argv[i]);
   11   }
   12   return 0;
   13 }
   14 

image.png
通过上述观察,可以很清晰的看出,argv表是由bash父进程制作(在命令行输入的),传递给子进程的。
第一个参数是可执行程序,之后的参数作为命令行选项。

  • ls -a -l 就是传递命令行参数,根据参数的不同,执行不同的代码逻辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1447733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux入门(1)Linux介绍

目录 1. 认识 Linux, 了解 Linux 的相关背景 1.发展史 2. 学会如何使用云服务器 3. 掌握使用远程终端工具 xshell 登陆 Linux 服务器 1. 认识 Linux, 了解 Linux 的相关背景 1.发展史 学习Linux系统编程&#xff0c;你可能要问Linux从哪里来&#xff1f;它是怎么发展的&am…

如何在Spring Boot中启用HTTPS?

在Spring Boot中启用HTTPS是一个增强应用程序安全性的重要步骤。下面我将介绍如何将一个Spring Boot项目配置成支持HTTPS协议。 引入 在现代的网络通信中&#xff0c;安全性成为了一个不能忽视的要求。特别是当我们谈论到数据传输时&#xff0c;保护用户信息的安全性是非常重要…

vue-组件组成和组件通信(四)

组件的三大组成部分 (结构/样式/逻辑) scoped样式冲突 默认情况&#xff1a;写在组件中的样式会 全局生效 → 因此很容易造成多个组件之间的样式冲突问题。 1. 全局样式: 默认组件中的样式会作用到全局 2. 局部样式: 可以给组件加上 scoped 属性, 可以让样式只作用于当前组…

【北邮鲁鹏老师计算机视觉课程笔记】07 Local feature-Blob detection

【北邮鲁鹏老师计算机视觉课程笔记】07 Local feature-Blob detection 1 实现尺度不变性 不管多近多远&#xff0c;多大多小都能检测出来 找到一个函数&#xff0c;实现尺度的选择特性 2 高斯偏导模版求边缘 做卷积 3 高斯二阶导拉普拉斯 看哪个信号能产生最大响应 高斯…

TinUI v5预发布记录

TinUI v5预发布记录 前言新控件滚动选择框菜单按钮 新样式pre1pre2pre3 新功能导入字体文件 前言 TinUI是一个从2021年正式开始并一直维护到现在的小项目&#xff0c;中间经过了四代版本的更新。因为一些原因&#xff0c;2023年&#xff0c;TinUI-4后更新较少。 TinUI发展历程…

【MATLAB】小波神经网络回归预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 小波神经网络回归预测算法是一种利用小波变换和人工神经网络相结合的方法&#xff0c;用于解决回归预测问题。下面将详细介绍该算法的原理与方法&#xff1a; 小波变换&#xff1a; 小波变…

网络渗透测试:Wireshark抓取qq图片

Wireshark Wireshark Downloadhttps://www.wireshark.org/download.html 简介 WireShark是非常流行的网络封包分析工具&#xff0c;可以截取各种网络数据包&#xff0c;并显示数据包详细信息。常用于开发测试过程中各种问题定位。本文主要内容包括&#xff1a; 1、Wireshar…

内网穿透 | 推荐两个免费的内网穿透工具

目录 1、简介 2、Ngrok 2.1、下载安装 2.2、运行 2.3、固定域名 2.4、配置多服务 3、cpolar 3.1、下载安装 3.2、运行 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应…

【前沿技术杂谈:AI 模型训练成本】到 2030 年,AI 模型训练成本预计将从 1 亿美元增加到 5 亿美元

【前沿技术杂谈&#xff1a;AI 模型训练成本】到 2030 年&#xff0c;AI 模型训练成本预计将从 1 亿美元增加到 5 亿美元 简述五年后&#xff0c;人工智能将掌握在谁的手中&#xff1f; 简述 根据 OpenAI 最近的一份报告&#xff0c;到 2030 年&#xff0c;训练大型 AI 模型的成…

matplotlib从起点出发(13)_Tutorial_13_Autoscaling

0 自动放缩 轴上的限制可以手动设置&#xff08;例如ax.set_xlim(xmin, xmax))&#xff0c;或者Matplotlib可以根据Axes上已有的数据自动设置它们。此种放缩行为有许多选项&#xff0c;如下所述。 我们将从一个简单的折线图开始&#xff0c;显示自动缩放将轴限制扩展到数据的…

11-OpenFeign-实现负载均衡策略

2021.0.1版本使用 spring-cloud-loadbalancer 1、默认开启负载均衡策略 使用default RoundRobinLoadBalancer策略 无需yaml文件配置&#xff0c;openfeignclient配置 RandomLoadBalancer &#xff1a;基于随机访问的负载均衡策略NacosLoadBalancer&#xff1a;基于Nacos权重…

软件项目—项目管理计划

《项目管理计划》 1.项目总体组织架构 2.项目进度管理办法 3.项目沟通管理 4.项目风险管理

c++关于this指针

this指针是隐藏在每一个成员函数中的特殊指针&#xff0c;它指向的是所在成员对象的本身。this顾名思义&#xff0c;就是“这个” this:指针,指向当前的对象 ,"我" ,只能出现在类的成员函数中,一般不使用 class A { private:int i; public:int get()//获取成员变量…

微信小程序开发学习笔记《17》uni-app框架-tabBar

微信小程序开发学习笔记《17》uni-app框架-tabBar 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建tabBar分支 运行如下的命令&#xff0c;基于master分支在本地创建tabBar子分支&#x…

2.13学习总结

1.出差&#xff08;Bleeman—ford&#xff09;&#xff08;spfa&#xff09; &#xff08;dijkstra&#xff09; 2.最小生成树&#xff08;prim&#xff09;&#xff08;Kruskal&#xff09; 最短路问题&#xff1a; 出差https://www.luogu.com.cn/problem/P8802 题目描述 AA …

专利申请与论文发表有什么区别

一、背景 专利申请和发表期刊论文是科研成果两种不同的保护与传播方式&#xff0c;它们的主要区别在于&#xff1a; 1. 目的与性质&#xff1a; - **专利申请**&#xff1a;主要目的是获得对发明创造的法律保护&#xff0c;确保发明人在一定时期内&#xff08;如发明专利通…

数据工程工程师学习路线图

数据工程岗位要求 Skill Sets required: - Hands on experience enabling data via Adobe Analytics and/or Google Analytics - Understanding of how customer level data is captured and stitched with behavioural data - Experience working with Testing (QA) and D…

复旦大学最新研究:如何让大模型敢回答“我不知道”?

引言&#xff1a;AI助手的真实性挑战 在人工智能&#xff08;AI&#xff09;的发展进程中&#xff0c;基于大型语言模型&#xff08;LLMs&#xff09;的AI助手已经在多个任务中展现出惊人的性能&#xff0c;例如对话、解决数学问题、编写代码以及使用工具。这些模型拥有丰富的…

【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…

C#使用密封类密封用户信息

目录 一、涉及到的知识点 1.密封类定义 2.何时使用密封类 3.使用密封类的注意事项 二、实例1 三、实例2 1.源码 2.生成效果 在C#中&#xff0c;密封类&#xff08;sealed class&#xff09;是一种不能被其他类继承的类。它用于防止其他类继承它的功能和属性。 一、涉…