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

相关文章

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1