我不确定如何标题,但我要做的是将username
设置为$DEV_ENVIRONMENT
,$STAGE_ENVIRONMENT
或{{1}分别在我的属性文件中定义。
我的函数会接受一个参数($PROD_ENVIRONMENT
,DEV
或STAGE
)并根据PROD
中定义的边缘检查主机名。
$_ENVIRONMENT
例如,如果我传入while IFS=',' read -ra line
do
for i in "${line[@]}"
do
if [ $(hostname) = $i ]
then
username="$1"_USERNAME
break
fi
done
done <<< "${1}_ENVIRONMENT"
,那么我希望DEV
设置为username
并且我希望$DEV_USERNAME
循环搜索到while
中定义的节点,这两个节点都是从我的属性文件中读取的值。
答案 0 :(得分:3)
Bash支持indirection expansion,所以你可以这样做:
var=${1}_ENVIRONMENT
username=${!var}
而不是稍微繁琐且有潜在危险的评估:
eval username=\$${1}_ENVIRONMENT
所以对于你的代码:
while IFS=',' read -ra line
do
for i in "${line[@]}"
do
if [ $(hostname) = $i ]
then
var="$1"_USERNAME
username=${!var}
break
fi
done
done <<< "${1}_ENVIRONMENT"