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 -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 $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中,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; 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。