我要找个做网站的公司,国内最有趣的25个网站,做网站的软件叫什么,招聘网站怎么做吸引人大家都知道#xff0c;在 Linux 系统中#xff0c;有环境变量和 Shell 变量这两种变量。环境变量是在程序及其子程序中全局可用的#xff0c;常常用来储存像默认的文本编辑器或者浏览器#xff0c;以及可执行文件的路径等等这样的信息。而 Shell 变量仅在当前 Shell 中可用…大家都知道在 Linux 系统中有环境变量和 Shell 变量这两种变量。环境变量是在程序及其子程序中全局可用的常常用来储存像默认的文本编辑器或者浏览器以及可执行文件的路径等等这样的信息。而 Shell 变量仅在当前 Shell 中可用可以用来存储当前用户的 ID 等信息。那么什么是环境变量什么是 Shell 变量该如何设置和查看这两种变量呢接下来让良许为你解答环境变量环境变量是以键值对的形式实现的是在整个系统范围内都可用的变量并由所有派生的子进程和 Shell 继承。而环境变量的名称是区分大小写的且通常以大写的形式命名 ( MYVAR1, MYVAR2… )单个值的环境变量看起来是这样的KEYvalue1如果你想要将多个值赋予环境变量则通常用冒号 ( : ) 作为分隔符。每一对键值对最终看起来是这样子的KEYvalue1:value2:value3如果要赋予环境变量的值包含空格则需要使用引号KEYvalue with spacesShell变量Shell 变量是专门用于设置或定义它们的 Shell 中的变量。每个 Shell 例如 zsh 和 bash 都有一组自己内部的 Shell 变量。它们通常用于跟踪临时数据比如当前工作目录而用法则与环境变量相同。如果你想让 Shell 变量作为全局变量使用可以使用 export 指令$ export MYVARlxlinux.net$ echo $MYVARlxlinux.net$ env | grep MYVARMYVARlxlinux.net常见的环境变量与 Shell 变量一些环境变量和 Shell 变量是非常有用的并且经常会被引用。以下是一些常见的你以后可能会遇到的环境变量变量名含义TERM这指定运行 Shell 时要模拟的终端类型。可以针对不同的操作需求模拟不同的硬件终端。不过你通常不需要管这个变量。USER当前登录的用户PWD当前的工作目录OLDPWD上一个工作目录这个变量由 Shell 保存以便通过执行 cd - 切换回上一个工作目录。LS_COLORS这定义了 ls 指令的颜色输出代码用于向 ls 指令添加颜色输出。这通常用于区分不同的文件类型并使用户对文件类型等信息一目了然。MAIL当前用户邮箱的路径PATH系统在查找指令时会检查的目录列表。当用户输入一个指令时系统将按此目录列表的顺序检查目录以寻找相应的可执行文件。LANG当前的语言和本地化设置包括字符编码。HOME当前用户的主目录_上一个被执行的指令除了以上这些环境变量你也可能会经常遇到以下这些 Shell 变量:变量名含义BASHOPTS执行 bash 时所启用的选项列表这对于确定 Shell 环境是否按照预期的方式运行很有帮助。BASH_VERSION人类可读格式的正在执行的 bash 版本BASH_VERSINFO机器可读格式的正在执行的 bash 版本COLUMNS用于设置绘制到屏幕上的输出信息的宽的列数DIRSTACKpushd 和 popd 命令可用的目录堆栈。HISTFILESIZE存储到文件中的命令历史记录的行数。默认为 ~/.bash_history 文件的行数。HISTSIZE内存中允许存储的命令历史记录的行数即 histroy 命令所能打印出来的行数。HOSTNAME计算机的主机名IFS内部字段分隔符用于分隔命令行上的输入。默认以空格作为分隔符。PS1定义主命令提示符。这用于定义启动 Shell 会话时命令提示符的外观。而 PS2 用于声明跨越多行的命令的命令提示符。SHELLOPTS可以用 set 命令设置的 Shell 选项。UID当前用户的 UID (用户 ID)查看 Shell 变量与环境变量在 Linux 系统中有以下几种命令可以让你查看环境变量env — 该命令可以让你在自定义的环境中运行程序并且不需要改变当前的环境。当不带参数使用 env 命令时它会打印出当前的环境变量列表。printenv — 可以打印出所有的或者指定的环境变量。set — 该命令可以设置或者删除 Shell 变量。当不带参数使用 set 命令时它将打印出包括环境变量与 Shell 变量在内的所有变量以及 Shell 函数的列表。默认状态下env 和 printenv 的功能是完全相同的$ printenvSSH_CONNECTION10.0.2.2 37182 10.0.2.15 22LESSCLOSE/usr/bin/lesspipe %s %sLANGC.UTF-8XDG_SESSION_ID5USERalvinMYVARlxlinux.netPWD/home/alvinHOME/home/alvinSSH_CLIENT10.0.2.2 37182 22XDG_DATA_DIRS/usr/local/share:/usr/share:/var/lib/snapd/desktopSSH_TTY/dev/pts/0MAIL/var/mail/alvinTERMxterm-256colorSHELL/bin/bashSHLVL1LOGNAMEalvinXDG_RUNTIME_DIR/run/user/1000PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binLESSOPEN| /usr/bin/lesspipe %s_/usr/bin/printenv只有在更具体的功能上才能体现出 env 命令与 printenv 命令的区别。例如使用 printenv 命令你可以请求单个变量的值$ printenv SHELL/bin/bash$ printenv HOME/home/alvin$ printenv MYVARlxlinux.netenv 命令可通过将一组变量传递给命令来修改程序运行的环境env MYVARlxlinux.net command_to_run command_optionsprintenv 与 env 命令只能打印出环境变量而如果你想打印出所有变量或者 Shell 函数的列表你可以使用 set 指令。$ setBASH/bin/bashBASHOPTScheckwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES()BASH_ARGC()BASH_ARGV()BASH_CMDS()BASH_COMPLETION_VERSINFO([0]2 [1]8)BASH_LINENO()BASH_SOURCE()BASH_VERSINFO([0]4 [1]4 [2]20 [3]1 [4]release [5]x86_64-pc-linux-gnu)BASH_VERSION4.4.20(1)-releaseCOLUMNS140DIRSTACK()EUID1000GROUPS()HISTCONTROLignorebothHISTFILE/home/alvin/.bash_historyHISTFILESIZE2000HISTSIZE1000HOME/home/alvinHOSTNAMEubuntu-bionicHOSTTYPEx86_64IFS$ tnLANGC.UTF-8LESSCLOSE/usr/bin/lesspipe %s %sLESSOPEN| /usr/bin/lesspipe %sLINES35LOGNAMEalvin.....该命令将显示一个包含所有变量的大列表因此你可能会希望将输出传递给 less 命令。$ set | less设置 Shell 变量与环境变量Linux 系统中可以设置环境变量的命令有以下几种set — 该命令可以设置或者取消设置 Shell 变量。当不带参数使用 set 命令时它将打印出包括环境变量与 Shell 变量在内的所有变量以及 Shell 函数的列表。unset — 该命令可以删除 Shell 变量以及环境变量。export — 该命令可以设置环境变量。为了更好地理解 Shell 变量和环境变量之间的区别我们先从设置 Shell 变量开始讲然后再讲环境变量。先从在当前会话中定义一个 Shell 变量开始$ MYVARlxlinux你可以用 echo $MYVAR 来验证变量是否已设置$ echo $MYVARlxlinux使用 printenv 命令检验该变量是否为环境变量$ printenv MYVAR没有输出返回这就意味着 MYVAR 变量并不是环境变量。export 命令可以用来设置环境变量。要创建环境变量只需用 export 命令将 Shell 变量导出为环境变量$ export MYVAR你可以用以下语句检验$ printenv MYVARlxlinux当然你也可以只用一行代码来设置环境变量$ export MYNEWVARMy New Variable但是以这种方式创建的环境变量只能用于当前会话如果你打开一个新的 Shell 会话或者退出登陆所有的变量都将会丢失。我们也可以将环境变量还原为 Shell 变量或者将其完全删除MYVAR 变量被定义为环境变量我们可以通过输入以下代码将其还原为 Shell 变量:$ export -n MYVAR这样MYVAR 变量就不再是环境变量了但依然还是 Shell 变量。无论是 Shell 变量还是环境变量想要完全删除变量都可以使用 unset 命令来删除$ unset MYVAR可以通过以下语句来验证 MYVAR 变量已经删除$ echo $MYVAR由于变量已经删除了所以没有任何返回。环境变量的持久化许多程序都需要使用环境变量来决定具体的执行方式但是我们并不希望每次启动新的 Shell 会话时都必须重新设置重要的变量因此我们需要将重要的环境变量写入配置文件中。Shell 会话有不同的启动方式比如连接到终端的交互式 Shell 与未连接到终端的非交互式 Shell还有登录式 Shell 与非登录式 Shell 而 bash Shell 会根据会话不同的启动方式而读取不同的配置文件。但是在大多数 Linux 发行版中当你启动一个新的 Shell 会话时一般都会从以下文件中读取环境变量:/etc/environment — 使用此文件来设置系统范围内可用的环境变量。/etc/profile — 每当 bash 登录 Shell 时都会加载此文件中设置的变量。~/.bashrc — 每个用户特定的 Shell 配置文件。例如 如果你使用的是Bash就可以在其中声明变量。如果要将新的环境变量加载到当前的 Shell 会话中可以使用source命令$ source ~/.bashrc如果你想要设置环境变量你就可以考虑将其添加到 /etc/profile 、/etc/bash.bashrc 或 /etc/environment 文件中。结论在本文章中我们了解了一些常见的环境变量和 Shell 变量也学习了如何设置和查看这些变量其实这些变量一直都在我们的 Shell 会话中而且对许多程序都很有用有很多常见的场景都会引用到这些变量。希望这对你的工作也有帮助。如果你还对这两种变量有任何疑问请留言告诉我呗