繁体   English   中英

在Bash脚本中,如何将变量添加到变量名中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM