Shell - 使用Linux环境变量

2019/12/11

如何获得环境变量?

一共有如下三种方式:

1. env
2. printenv
3. set

我们先来说下envset的区别。

env: lt only sees environment variables.
set: Since set is a built-in command, it can also shell-local variables(including shell functions).

也就是说,env的作用就是显示环境变量,而set的作用更广,还包含一些本地shell变量和函数。

再来看下printenv

printenv: Print the values of the specified environment variables.
If no variable is specified, print name and value pairs for them all.

也就是说,当printenv没有指定某个或多个(以空格分隔)环境变量时,它的作用就和env一样。

三种变量梳理

  • 全局环境变量
  • 局部变量
  • 函数中的局部变量

先来说下全局环境变量,它对于所有shell均可用。

而局部变量仅对当前shell生效。

set命令的四个常用参数

  • -u: Treat unset variables as an error when substituting.

默认情况下,遇到不存在的变量,输出的是空行。但是,我们往往期望直接报错。

set -u

echo $a
echo "yyc"

  • -x: Print commands and their arguments where they are executed.

x参数的作用是将命令以及涉及的参数打印出来,让你更加清楚脚本执行了什么。

set -x
name=${1}

function sayHi {
  echo "Hi ${1}"
}
sayHi $name

  • -e: Exit immediately if a command exit with a non-zero status.

首先要说下默认的错误处理机制,一旦出现错误,会打印出来,但是仍会继续往下执行。但是遇到错误的情况,我们往往期望立即停止,这就是e参数的由来。

set -e

echoo "yyc"
echo "yyc"

  • -o pipefail

当你使用e参数后,大多数的错误场景均会直接退出,但是遇到管道就失灵了,因此就发明了-o pipefail

set -eo pipefail

ehcoo "yyc" | echo "yyc"
echo "franki

总结一下,以后在shell脚本中推荐使用set -euxo pipefail

Others

  • 命名规范
  1. 环境变量名建议使用全大写和下划线。
  2. 局部变量名建议使用全小写和下划线。
  • 如何设置或删除环境变量?
// set environment variable.
export ENV_KEY=value

// unset environment variable.
unset ENV_KEY

Reference


一位喜欢提问、尝试的程序员

(转载本站文章请注明作者和出处 姚屹晨-yaoyichen

Post Directory