[英]In Bash scripting, how can I add a variable into a variable name?
因此,以以下脚本为例:
PROFILE1=profileName
SERVER1=serverName
PROFILE2=profile2Name
SERVER2=server2Name
VAR_$PROFILE1_$SERVER1=/home/$PROFILE1/$SERVER1/data
VAR_$PROFILE1_$SERVER2=/home/$PROFILE1/$SERVER2/data
VAR_$PROFILE2_$SERVER1=/home/$PROFILE2/$SERVER1/data
echo "$VAR_$PROFILE1_$SERVER1"
这就是我要完成的工作的基础。 这可能不是最好的解决方法,但是对于刚接触bash脚本的人来说,这是我首先想到的方法。
我只需要能够在脚本文件中更改一个位置,并能够根据我所在的系统的需要添加新的“ VAR _...”。
这有可能吗? 如果不是,那么,如果您了解我要完成的工作,是否可以建议其他方法?
您可以为此使用
eval
declare
( 感谢Glenn Jackman指出正确的方向! ):
$ declare VAR_${PROFILE1}_${SERVER1}="hello"
$ echo $VAR_profileName_serverName
hello
在您的情况下:
declare VAR_${PROFILE1}_${SERVER1}=/home/$PROFILE1/$SERVER1/data
declare VAR_${PROFILE1}_${SERVER2}=/home/$PROFILE1/$SERVER2/data
declare VAR_${PROFILE2}_${SERVER1}=/home/$PROFILE2/$SERVER1/data
请注意VAR_${PROFILE1}_${SERVER1}
。 花括号告诉什么是变量的确切名称,否则VAR_$PROFILE1_$SERVER1
会寻找一个名为变量PROFILE1_
等。
由于echo VAR_${PROFILE1}_${SERVER1}
返回VAR_profileName_serverName
,因此可以使用变量,方法如下:
$ var="VAR_${PROFILE1}_${SERVER1}"
$ echo ${!var}
/home/profileName/serverName/data
请注意, ${!var}
是变量indirection ,它获取名称在$var
变量中的变量。
如果您具有bash版本4,请使用关联数组:
declare -A data
data=(
[$PROFILE1,$SERVER1]=/home/$PROFILE1/$SERVER1/data
[$PROFILE1,$SERVER2]=/home/$PROFILE1/$SERVER2/data
[$PROFILE2,$SERVER1]=/home/$PROFILE2/$SERVER1/data
)
for key in "${!data[@]}"; do
printf "%s\t%s\n" "$key" "${data[$key]}"
done
echo "${data[$PROFILE1,$SERVER2]}"
profileName,server2Name /home/profileName/server2Name/data
profileName,serverName /home/profileName/serverName/data
profile2Name,serverName /home/profile2Name/serverName/data
/home/profileName/server2Name/data
你是这个意思?
ABC="ahoj\$UNSETVAR"
echo $ABC
UNSETVAR=now_it_is_set
eval "DEV=$ABC"
echo $DEV
输出将是:
ahoj$UNSETVAR
ahojnow_it_is_set
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.