您只需要使用间接引用,但要这样做,您需要先将特殊参数的值存储$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}
展开到名称为 in 的变量的值var
。如果var
是“foo”,则与$foo
. 如果var
是“baz”,则与$baz
.
${var:-default}
var
如果它被设置并且具有非空值,则扩展为的值。否则,它会扩展为您在 ':-' 之后的任何内容,在这种情况下为字符串默认值。如果没有字符串,则使用空值。${var:-}
如果var
未设置(或已经是空字符串),则将扩展为空字符串。
将两者结合起来,${!var:-}
获取变量 var,并将其值用作变量名。然后它尝试扩展该变量,如果未设置或为空,则扩展为空字符串。所以如果var
是la
,它会扩展为 的值la
。如果var
是re
,并且没有re
设置变量,则扩展为空字符串。
最后,-n
运算符测试其参数是否为非零长度。换句话说,它检查尝试扩展名称所在的变量的结果var
是否不是空字符串。如果这是真的,那么再次展开它(是的,它有点多余)并将其值分配给flat
.
正如上面写的答案,flat
如果脚本的参数不是设置在test1
. 如果您不介意flat
被设置(例如,flat=""
),则不需要该if
语句。您可以只使用一行来设置的值flat
:
#!/bin/bash
. test1
var="$1"
flat="${!var:-}"