如何让脚本从属性文件中读取值并将其传递给同一个脚本?

Ste*_*Scm -2 bash

我是linux shell脚本的新手.我希望我的脚本读取属性文件并将值保存在任何变量中,我可以在同一个脚本中传递相同的...因为我写的脚本不符合我的要求:

!/bin/bash

. test1

flat

if [ "$1" == test1 ]; then
    flat=$1;  /assign value to var flat
    echo "flat"        
fi
Run Code Online (Sandbox Code Playgroud)

test1是属性文件,包括:

la=12

tu=15
Run Code Online (Sandbox Code Playgroud)

现在我想跑的时候:

./myscript la
Run Code Online (Sandbox Code Playgroud)

它从属性文件中读取它并将值存储在flat变量中.请帮我.

che*_*ner 6

您只需要使用间接引用,但为此,您需要首先将特殊参数的值存储$1在常规参数中.

!/bin/bash

. test1

var="$1"

# Only assign to flat if the variable specified in var is defined
if [ -n "${!var:-}" ]; then
    flat="${!var}";  # assign value to var flat
    echo "flat"        
fi
Run Code Online (Sandbox Code Playgroud)

首先,${!var}扩展到名称所在的变量的值var.如果var是"foo",它就是一样的$foo.如果var是"baz",它就是一样的$baz.

${var:-default}扩展为varif 的值,并且具有非null值.否则,它会扩展为': - '之后的任何内容,在这种情况下是字符串默认值.如果没有字符串,则使用null值.因此${var:-},如果var未设置(或者已经是空字符串),则会扩展为空字符串.

将两者结合${!var:-}使用变量var,并将其值用作变量名.然后它尝试扩展该变量,如果未设置或为null,则展开为空字符串.所以,如果varla,它扩展到的值la.如果varre,并且没有变量re集,则它会扩展为空字符串.

最后,-n运算符测试其参数是否为非零长度.换句话说,它检查尝试扩展名称所在的变量的结果var不是空字符串.如果这是真的,那么再次展开它(是的,它有点多余)并将其值赋值给flat.

如上面的答案所示,flat如果脚本的参数不是设置的变量的名称,则变量是未定义的test1.如果你不介意flat被设置,不管怎么说flat="",你不需要这个if陈述.您只需使用一行来设置值flat:

#!/bin/bash
. test1
var="$1"
flat="${!var:-}"
Run Code Online (Sandbox Code Playgroud)