如果传递参数,则从脚本外部强制变量值

时间:2016-12-12 14:32:04

标签: bash shell parameter-passing argparse

我在想什么是从脚本外部强制变量值的最佳方法。

现在我正在使用配置文件,但我被要求提供一种从外部强制参数的方法。

实际代码

source "$1.iconf"

// some code that uses variables declared and initialized in the configuration file

这是在该配置文件中以静态方式使用变量值的标准情况。我只是运行脚本传递配置文件名。

./myscript.sh configuration_file

现在在配置文件中定义了一些变量:

Var1 = some value
Var2 = 42
Var3 = "foo"

我应该做些什么:

./myscript.sh configuration_file --Var1="Value defined from outside"
source "$1.iconf"

//Check if some variables are passed from run string
if [ <Passed_From_Run_String_condition> ]; then
    //override variables value
    //maybe some kind of arguments parsing??
fi

//some code that uses variables declared and initialized in the configuration file (and maybe overridden by passed values)

1 个答案:

答案 0 :(得分:1)

此脚本将首先将存储在作为第一个参数传递的配置文件中的变量源代码发送到脚本,然后将其作为第二个参数变量,可用于覆盖配置文件中的值或创建新变量(如果它们没有&以前存在过。

foo.sh

#!/bin/bash

source "$1"
eval "typeset $2"

echo ${var1}

配置

var1="foo"

运行脚本:

./foo.sh config var1=yup

输出:

yup

价值&#34; foo&#34;在配置文件中被通过第二个参数&#34;是&#34;传入的值替换。如果您想将变量设为只读,那么无法更改该值,您可以使用typeset -r来定义变量。