为什么“ set VAR = value”在bash中不起作用?

时间:2019-03-18 16:41:25

标签: bash shell

我无法正确设置环境变量。

这些是我deploy.sh的前几行:

if [[ -z ${PEM_PATH+x} ]]; then
    printf "Please set the PEM_PATH environment variable\n"
    exit 1
fi

这是我的终端输出:

bash-3.2$ set PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"
bash-3.2$ ls
Jenkinsfile     bps-dashboard.iml   mvnw            node_modules        package.json        src         webpack.config.js
README.md       deploy.sh       mvnw.cmd        package-lock.json   pom.xml         target
bash-3.2$ set PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"
bash-3.2$ echo $PEM_PATH
/Users/Elasticsearch/Desktop/ec2-poc.pem
bash-3.2$ sh deploy.sh
Please set the PEM_PATH environment variable
bash-3.2$

我在这里做什么错了?

1 个答案:

答案 0 :(得分:2)

set不会在bash(或其他POSIX系列外壳程序)中设置变量-它配置外壳程序选项标志或更改活动参数列表($1$2和等等)。

您可以运行以下任一命令将PEM_PATH定义为环境变量(不使用export的{​​{1}}或-x参数或使用{{1 }}是常规的,未导出的shell变量):

  • declare-使用一个命令定义和导出变量。
  • set -a-首先将export PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"定义为常规shell变量,然后将其提升为环境变量
  • PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"; export PEM_PATH-使用仅bash扩展名PEM_PATHdeclare -x PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"定义为导出变量。
  • declare-默认情况下,使用PEM_PATH将所有变量导出到环境;然后设置变量;然后关闭该标志。