Linux环境变量export命令笔记231207

Linux环境变量export命令笔记231207

export定义的变量

  • export使变量在"子Shell"也起作用
  • 只在本控制台本次会话起效, 另开一个控制台无效
  • 关闭控制台(关闭本次会话,exit)后失效,
  • 子shell中export的变量,不会在父Shell起作用,制作子子Shell,子子孙孙Shell中起作用
  • declare -x等效export
    设值时: export name=value效果等同declare -x name=value
    查看时: declare -xexport 列出的内容相同
典型例子,修改PATH
export PATH=$PATH:/XXXXXXX

👆等效👇

declare -x PATH=$PATH:/XXXXXXX
export 的作用是: 子Shell也生效

export的作用是将局部变量导出为环境变量,或直接定义环境变量, 环境变量与局部变量的区别就是:

  • 环境变量可以在子子孙孙Shell中继续发挥作用,
  • 局部变量只在本Shell中起作用

定义一个变量,在本Shell可以查看该变量, 但用sh或者bash命令进入子shell后就看不到该变量了

定义一个变量例如: Hello=World (等号左右不能有空格)

Hello=World

查看Hello的值 可以看到结果是World

echo $Hello ### 结果是:World

进入子Shell就看不到这个值了

bash  ### 进入子Shell
echo $Hello ### 输出空行,没有这个变量

exit回到上级Shell, 又可以看到了

exit   ### 回到上级Shell
echo $Hello ### 结果是:World

env命令可以查看环境变量,
在没有export之前,env是看不到定义的变量的
export之后就能看到了

env | grep Hello   ###找不到
export Hello   ###导出Hello为环境变量
env | grep Hello   ###找到:Hello=World

export -p命令也可以查看环境变量,
在没有export之前,export -p是看不到定义的变量的
export之后就能看到了

export -p | grep Hello   ###找不到
export Hello   ###导出Hello为环境变量
export -p | grep Hello   ###找到: declare -x Hello="World"

实例:

[z@vb-f39 /]$ echo $Hello[z@vb-f39 /]$ Hello=World
[z@vb-f39 /]$ echo $Hello
World
[z@vb-f39 /]$ sh
sh-5.2$ echo $Hellosh-5.2$ exit
exit
[z@vb-f39 /]$ echo $Hello
World
[z@vb-f39 /]$ bash
[z@vb-f39 /]$ echo $Hello[z@vb-f39 /]$ exit
exit
[z@vb-f39 /]$ echo $Hello
World
[z@vb-f39 /]$ env | grep Hello
[z@vb-f39 /]$ export Hello
[z@vb-f39 /]$ env | grep Hello
Hello=World
[z@vb-f39 /]$ sh
sh-5.2$ echo $Hello
World
sh-5.2$ exit
exit
[z@vb-f39 /]$ bash
[z@vb-f39 /]$ echo $Hello
World
[z@vb-f39 /]$ exit
exit
[z@vb-f39 /]$ echo $Hello
World
[z@vb-f39 /]$ env | grep Hello
Hello=World





export 的 参数

  • -f  代表[变量名称]中为函数名称。
  • -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
  • -p  列出所有的shell赋予程序的环境变量。
    选项:-f        所指代的是 shell 函数-n        删除每个 <名称>"导出" 属性-p        显示所有导出的变量和函数的列表





env , export , declare , set

在Linux中,envexportsetdeclare命令都与环境变量相关,但它们之间有一些区别:

  1. env命令:

    • env命令用于显示当前环境中的环境变量及其值。它打印出当前shell会话中定义的所有环境变量及其对应的值。
  2. export命令:

    • export命令用于设置和导出环境变量,使其在当前shell会话及其子进程中可用。它可以将一个变量标记为环境变量,并将其导出到后续执行的命令或脚本中。使用export命令定义的变量将成为环境变量,并可在整个会话中使用。
    • 即可设置又可查看, export 或 export -p用于查看环境变量, 效果相同
  3. set命令:

    • set命令用于设置和显示shell变量的值。它不仅可以设置环境变量,还可以设置其他类型的shell变量(如局部变量和位置参数)。set命令可以更广泛地用于配置和管理shell会话中的变量。
  4. declare命令:

    • declare命令用于声明shell变量并设置其属性。它可以创建新的变量或修改现有变量的属性,如整数属性、只读属性等。虽然declare也可以用于设置环境变量,但它提供更多选项来控制变量的行为和特性。

总结:

  • env用于显示当前环境变量。
  • export用于设置和导出环境变量。
  • set用于设置和显示shell变量的值。
  • declare用于声明shell变量并设置其属性。
查看的异同
envexportdeclare -x可查看环境变量 , setdeclare可查看环境变量和局部变量
  • envexportdeclare -x可查看环境变量
    envexport 列出的条目数相同, 排版样式不同
    export -pexportdeclare -x 列出的内容完全相同
  • setdeclare可查看环境变量和局部变量
    无参的 setdeclare 功能相同, 但没法比较,因为有些变量在变化, 连续执行set命令或连续执行declare命令获得的结果都稍有差异
export -pexportdeclare -xdeclare -x -p 列出的内容完全相同

测试代码:

st001=$(declare -x) ; st002=$(export -p) ;  st003=$(export) ;if [[ $st001 == $st002 ]] ; then  echo yes; else echo no; fiif [[ $st001 == $st003 ]] ; then  echo yes; else echo no; fi

上面代码的结果应该是两行 “yes”
在判断中用$取值时, 最好加上双引号, 上面的测试虽然通过了, 但如果内容很多很杂时就出错了, 最好加上双引号

st001=$(declare -x) ; st002=$(export -p) ;  st003=$(export) ;if [[ "$st001" == "$st002" ]] ; then  echo yes; else echo no; fiif [[ "$st001" == "$st003" ]] ; then  echo yes; else echo no; fi

实例:

[z@vb-f39 /]$ st001=$(declare -x)
[z@vb-f39 /]$ st002=$(export -p)
[z@vb-f39 /]$ st003=$(export)
[z@vb-f39 /]$ if [[ $st001 == $st002 ]] ; then  echo yes; else echo no; fi
yes
[z@vb-f39 /]$ if [[ $st001 == $st003 ]] ; then  echo yes; else echo no; fi
yes

用单括号也可以

st001=$(declare -x) ; st002=$(export) ; st003=$(export -p) ; st004=$(declare -x -p) ; st005=$(declare -xp)if [ "$st001" == "$st002" ] ; then  echo yes; else echo no; fiif [ "$st001" == "$st003" ] ; then  echo yes; else echo no; fiif [ "$st001" == "$st004" ] ; then  echo yes; else echo no; fiif [ "$st001" == "$st005" ] ; then  echo yes; else echo no; fi

用单等号也可以

st001=$(declare -x) ; st002=$(export) ; st003=$(export -p) ; st004=$(declare -x -p) ; st005=$(declare -xp)if [ "$st001" = "$st002" ] ; then  echo yes; else echo no; fiif [ "$st001" = "$st003" ] ; then  echo yes; else echo no; fiif [ "$st001" = "$st004" ] ; then  echo yes; else echo no; fiif [ "$st001" = "$st005" ] ; then  echo yes; else echo no; fi

双中括号也能用单等号

st001=$(declare -x) ; st002=$(export) ; st003=$(export -p) ; st004=$(declare -x -p) ; st005=$(declare -xp)if [[ "$st001" = "$st002" ]] ; then  echo yes; else echo no; fiif [[ "$st001" = "$st003" ]] ; then  echo yes; else echo no; fiif [[ "$st001" = "$st004" ]] ; then  echo yes; else echo no; fiif [[ "$st001" = "$st005" ]] ; then  echo yes; else echo no; fi

也可以用test, 也是单等号双等会效果相同

st001=$(declare -x) ; st002=$(export) ; st003=$(export -p) ; st004=$(declare -x -p) ; st005=$(declare -xp)if test  "$st001" = "$st002"  ; then  echo yes; else echo no; fiif test  "$st001" = "$st003"  ; then  echo yes; else echo no; fiif test  "$st001" = "$st004"  ; then  echo yes; else echo no; fiif test  "$st001" = "$st005"  ; then  echo yes; else echo no; fi

单双中括号用单双等号比较字符串是否相等, 用-eq比较整数是否相等

没法用双小括号比较字符串, 双小括号只能比较整数

LinuxShell的 中括号[], 双中括号[[]], 双小括号(()) 笔记231207

设值的异同
  • export name=value 等效 declare -x name=value

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

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

相关文章

AI大模型,应该如何商业化?

近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;领域的迅猛发展&#xff0c;大模型逐渐成为引领创新和商业应用的关键推动力。然而&#xff0c;要想将AI大模型成功商业化&#xff0c;仅仅依赖商业模式的探索尝试是远远不够的。实际上&#xff0c;成功商业化的关键在…

【算法】位运算

目录 01. 整数在内存中的存储 01.1 无符号整数的表示方法 01.2 有符号整数的表示方法 02. 移位操作符 02.1 左移操作符 1 << n 2的n次幂 02.2 右移操作符 n >> 1 和 n / 2 03. 位操作符 03.1 按位与 n & 1 和 n % 2 n >> i & 1 n &…

springboot3.0更新后,idea创建springboot2.x项目

springboot3.0更新后&#xff0c;idea创建springboot2.x项目 点击以下红色框中的按钮 出现了如下图所示&#xff1a; 到这里我们发现没有jdk8的版本&#xff0c;不要慌&#xff0c;我们可以先在这里选择21&#xff0c;然后进入到真正的项目中手动去修改这个jdk的版本&#xff0…

几分钟在Ubuntu搭建本地Emlog博客网站并发布至公网无需购买域名服务器

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

uniapp开发ios,页面拉动时浮动出现大面积白色

直接上代码 <style lang"scss">html, body {height: 100%;width: 100%;margin: 0;padding: 0;overflow: hidden;-webkit-overflow-scrolling: touch;} </style>触底加载事件可以到uniapp查看 <scroll-view scroll-y"true" > </sc…

基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】

1、项目简介 本项目是一套基于JavaSEJDBC使用控制台操作的简易购物系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&…

应用程序中实现用户隐私合规和数据保护合规的处理方案及建议

随着移动互联网的发展&#xff0c;用户隐私合规和数据保护合规已经成为应用开发过程中不可忽视的重要环节。为了帮助开发者实现隐私和数据保护合规&#xff0c;本文将介绍一些处理方案和建议。 图片来源&#xff1a;应用程序中实现用户隐私合规和数据保护合规的处理方案及建议 …

SQL Server数据库的备份和还原

6.2 SQL Server备份和还原 数据库管理员最担心的情况就是数据库瘫痪&#xff0c;造成数据丢失&#xff0c;而备份作为数据的副本&#xff0c;可以有 效地保护和恢复数据。本节将介绍数据备份的原因&#xff0c;备份的方式.SOL Server的恢复模式.以及备 份策略和备份设备。 6.2…

每日汇评:在周五美国非农数据公布前,黄金上行空间有限

金价周四早间在2020美元上方巩固了此前的反弹&#xff1b; 随着美债收益率趋于稳定&#xff0c;美元处于三周高点&#xff1b; 黄金价格在第四季度图表上看起来很脆弱&#xff0c;焦点转向美国非农就业数据&#xff1b; 昨日早些时候&#xff0c;由于市场情绪依然疲软&#xff…

zookeeper常用接口

ZookeeperTemplate 是 Spring Cloud Zookeeper 中的一个重要类,它提供了一组方便的方法来操作 Zookeeper,例如创建节点、获取节点数据、删除节点等。下面列举了 ZookeeperTemplate 的一些常用方法及其作用: createExclusive(String path):创建独占节点。如果节点已经存在,…

docker安装Postgres-XL集群及踩过的N个坑

说明&#xff1a;本文是在一个机器内部用docker创建了三台centos&#xff0c;然后构建的pgxl集群 文章目录 1. 学习docker2. 创建三台centos3. 安装SSH4. 创建新用户postgres5. 关闭防火墙 关闭selinux6. 配置免密登录7. 下载并传输Postgres-XL的源码8. 配置环境变量10. 安装11…

[TKDE2020]@Multi-Source_Spatial_Entity_Linkage

论文地址&#xff1a;https://arxiv.org/pdf/1911.09016v1.pdf&#xff08;下文中提及的引用信息如未解释&#xff0c;请索引原论文末的参考文献&#xff09; 论文中提到的SSTD2019Multi-Source Spatial Entity Linkage (提取码&#xff1a;i3xt) 论文重要部分翻译 Abstract …

【Java系列】函数式接口编程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ARMV8 - A64 - 存储器读写指令

说明 存储器读写指令是用来读写内存/SRAM/外设寄存器等存储器的汇编指令。ARM指令集属于RISC指令集&#xff0c;RISC指令集采用典型的加载/存储体系结构&#xff0c;CPU无法对内存里的数据直接操作&#xff0c;只能通过Load/Store指令来实现&#xff0c;当我们需要对内存中的数…

视界臻色彩 轻巧薄未来 《2023年中国OLED电视发展白皮书》发布

随着中国经济迈入新周期&#xff0c;彩电行业也进入存量竞争阶段。在此背景下&#xff0c;主流品牌围绕新产品、新技术、新应用等方面积极发力&#xff0c;特别是在高端彩电市场的争夺中&#xff0c;伴随着三星OLED的入局开始变得愈发激烈。我国“十三五”规划中明确指出&#…

MySQL高级--01_1--数据库缓冲池(buffer pool)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 数据库缓冲池(buffer pool)DBMS 会申请占用内存来作为数据缓冲池&#xff0c;在真正访问页面之前&#xff0c;需要把在磁盘上的页缓存到内存中的Buffer Pool 之后才…

2024年网络安全比赛--系统渗透测试(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.在渗透机中对服务器主机进行信息收集&#xff0c;将服务器开启的端口号作为 Flag 值提交; 2.在渗透机中对服务器主机进行渗透&#xff0c;在服务器主机中获取服务器主机名称&#xff…

MX6ULL学习笔记 (八) platform 设备驱动实验

前言&#xff1a; 什么是 Linux 下的 platform 设备驱动 Linux下的字符设备驱动一般都比较简单&#xff0c;只是对IO进行简单的读写操作。但是I2C、SPI、LCD、USB等外设的驱动就比较复杂了&#xff0c;需要考虑到驱动的可重用性&#xff0c;以避免内核中存在大量重复代码&…

全志XR806蓝牙透传(单向)测试

评测三 蓝牙透传(单向) 有时无线透传在无法布线时有很方便的效用&#xff0c;不妨试试蓝牙透传&#xff0c;效果如下&#xff1a; 具体是无线数据->串口数据&#xff0c;串口数据->无线数据&#xff0c;目前前者实现了&#xff0c;后者还有些问题未解决&#xff0c; 实现…

支持生成接口文档!Apipost IDEA插件使用体验

前言 Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款…