Linux环境变量export命令笔记231207
2023-12-13 04:46:46
Linux环境变量export命令笔记231207
export定义的变量
- export使变量在"子Shell"也起作用
- 只在本控制台本次会话起效, 另开一个控制台无效
- 关闭控制台(关闭本次会话,exit)后失效,
- 子shell中export的变量,不会在父Shell起作用,制作子子Shell,子子孙孙Shell中起作用
declare -x
等效export
设值时:export name=value
效果等同declare -x name=value
查看时:declare -x
和export
列出的内容相同
典型例子,修改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 $Hello
sh-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中,env
、export
、set
和declare
命令都与环境变量相关,但它们之间有一些区别:
-
env
命令:env
命令用于显示当前环境中的环境变量及其值。它打印出当前shell会话中定义的所有环境变量及其对应的值。
-
export
命令:export
命令用于设置和导出环境变量,使其在当前shell会话及其子进程中可用。它可以将一个变量标记为环境变量,并将其导出到后续执行的命令或脚本中。使用export
命令定义的变量将成为环境变量,并可在整个会话中使用。- 即可设置又可查看,
export 或 export -p
用于查看环境变量, 效果相同
-
set
命令:set
命令用于设置和显示shell变量的值。它不仅可以设置环境变量,还可以设置其他类型的shell变量(如局部变量和位置参数)。set
命令可以更广泛地用于配置和管理shell会话中的变量。
-
declare
命令:declare
命令用于声明shell变量并设置其属性。它可以创建新的变量或修改现有变量的属性,如整数属性、只读属性等。虽然declare
也可以用于设置环境变量,但它提供更多选项来控制变量的行为和特性。
总结:
env
用于显示当前环境变量。export
用于设置和导出环境变量。set
用于设置和显示shell变量的值。declare
用于声明shell变量并设置其属性。
查看的异同
env
和export
和declare -x
可查看环境变量 , set
和declare
可查看环境变量和局部变量
env
和export
和declare -x
可查看环境变量
env
和export
列出的条目数相同, 排版样式不同
export -p
和export
和declare -x
列出的内容完全相同set
和declare
可查看环境变量和局部变量
无参的set
和declare
功能相同, 但没法比较,因为有些变量在变化, 连续执行set
命令或连续执行declare
命令获得的结果都稍有差异
export -p
和export
和declare -x
和 declare -x -p
列出的内容完全相同
测试代码:
st001=$(declare -x) ; st002=$(export -p) ; st003=$(export) ;
if [[ $st001 == $st002 ]] ; then echo yes; else echo no; fi
if [[ $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; fi
if [[ "$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; fi
if [ "$st001" == "$st003" ] ; then echo yes; else echo no; fi
if [ "$st001" == "$st004" ] ; then echo yes; else echo no; fi
if [ "$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; fi
if [ "$st001" = "$st003" ] ; then echo yes; else echo no; fi
if [ "$st001" = "$st004" ] ; then echo yes; else echo no; fi
if [ "$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; fi
if [[ "$st001" = "$st003" ]] ; then echo yes; else echo no; fi
if [[ "$st001" = "$st004" ]] ; then echo yes; else echo no; fi
if [[ "$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; fi
if test "$st001" = "$st003" ; then echo yes; else echo no; fi
if test "$st001" = "$st004" ; then echo yes; else echo no; fi
if test "$st001" = "$st005" ; then echo yes; else echo no; fi
单双中括号用单双等号比较字符串是否相等, 用-eq
比较整数是否相等
没法用双小括号比较字符串, 双小括号只能比较整数
LinuxShell的 中括号[], 双中括号[[]], 双小括号(()) 笔记231207
设值的异同
export name=value
等效declare -x name=value
文章来源:https://blog.csdn.net/kfepiza/article/details/134848473
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!