Linux环境变量export命令笔记231207

2023-12-08 06:30

本文主要是介绍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

这篇关于Linux环境变量export命令笔记231207的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/468863

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li