在Bash脚本中传递变量名称和值

Arg*_*ent 1 linux bash shell

我只是想验证我写的脚本正在做我认为正在做的事情,并且它正在正确地执行它.

我想编写一个带有环境变量和字符串值的脚本,然后将该变量设置为给定值.所以我可以做类似的事情setvar BOOST_HOME /home/me/boost/boost_1.52.0,脚本会export BOOST_HOME=/home/me/boost/boost_1.52.0

就像是:

#!/bin/bash
# Usage: setvar VAR VAR_VALUE
function setvar()
{
    VAR=${1}
    VAR_VALUE=${2}
    if [ -d $2 ]
    then
        eval export $VAR=$2
    fi
}
Run Code Online (Sandbox Code Playgroud)

这似乎是有效的,至少从回声echo测试判断,但我仍然不太熟悉shell脚本,并希望有人要么验证我在做什么或指出我做错了什么/不正确.

ric*_*ici 5

你不需要eval.

setvar() {
  if [[ -d $2 ]]; then
    export "$1=$2"
  fi
}
Run Code Online (Sandbox Code Playgroud)

使用[[而不是[避免引用的需要$2,因为bash(和其他shell)扩展[[不会对内部参数扩展进行分词.如果我坚持使用老式的[ -d "$2" ],我将不得不引用它$2,以防它的值包括空格.