我是linux shell脚本的新手。我希望我的脚本读取属性文件并将值保存在任何变量中,我可以在同一个脚本中传递相同的值。 因为我写的脚本不符合我的要求:
!/bin/bash
. test1
flat
if [ "$1" == test1 ]; then
flat=$1; /assign value to var flat
echo "flat"
fi
test1是属性文件,包括:
la=12
tu=15
现在我想跑的时候:
./myscript la
它从属性文件中读取它并将值存储在flat变量中。 请帮帮我。
答案 0 :(得分: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
首先,${!var}
扩展为名称为var
的变量的值。如果var
为“foo”,则与$foo
相同。如果var
为“baz”,则与$baz
相同。
${var:-default}
已设置并且具有非空值,则 var
会扩展为${var:-}
的值。否则,它会扩展为': - '之后的任何内容,在这种情况下是字符串默认值。如果没有字符串,则使用null值。因此,如果未设置var
(或者已经是空字符串),${!var:-}
将扩展为空字符串。
结合两者,var
获取变量var,并将其值用作变量名。然后它尝试扩展该变量,如果未设置或为null,则展开为空字符串。因此,如果la
为la
,则会扩展为var
的值。如果re
为re
,并且未设置变量-n
,则会扩展为空字符串。
最后,var
运算符测试其参数是否为非零长度。换句话说,它检查尝试扩展名称在flat
中的变量的结果不是空字符串。如果这是真的,那么再次展开它(是的,它有点多余)并将其值分配给flat
。
如上所述,如果脚本的参数不是test1
中变量集的名称,则变量flat
未定义。如果您不介意设置flat=""
(例如if
),则不需要flat
语句。您只需使用一行来设置#!/bin/bash
. test1
var="$1"
flat="${!var:-}"
的值:
{{1}}
答案 1 :(得分:-1)