Bash 基于值的动态变量名
可能是一个noob问题,但我有一个特殊的挑战,我想根据一个值动态生成变量名。如果我需要3个变量,变量名将分别动态递增var_0、var_1、var_3 我现在的解决方案是赤裸裸的。我只是使用Bash 基于值的动态变量名,bash,dynamic,Bash,Dynamic,可能是一个noob问题,但我有一个特殊的挑战,我想根据一个值动态生成变量名。如果我需要3个变量,变量名将分别动态递增var_0、var_1、var_3 我现在的解决方案是赤裸裸的。我只是使用read-p获取用户输入并将其保存到变量。因此,对于5台主机,我只复制了5次,以完成任务,但不是一个干净的解决方案。我环顾四周,通读了declare和eval,但什么也没找到 考虑一种解决方案,首先输入主机的数量,然后根据主机的数量动态拾取并请求用户输入,并保存到动态递增的变量 感谢您的帮助,干杯使用数组。但
read-p
获取用户输入并将其保存到变量。因此,对于5台主机,我只复制了5次,以完成任务,但不是一个干净的解决方案。我环顾四周,通读了declare
和eval
,但什么也没找到
考虑一种解决方案,首先输入主机的数量,然后根据主机的数量动态拾取并请求用户输入,并保存到动态递增的变量
感谢您的帮助,干杯使用数组。但是,您不必向用户询问主机的数量。让他们输入任意数量的主机,并通过输入空行完成:
echo "Please enter hosts, one per line."
echo "Press enter on an empty line to finish."
hosts=()
while read -p "host ${#hosts[@]}: " host && [ -n "$host" ]; do
hosts+=("$host")
done
echo "Finished"
或者,让用户在同一行中输入所有主机,并用空格分隔:
read -p "Please enter hosts, separated by whitespace: " -a hosts
要访问各个主机,请使用${hosts[0]}
,${hosts[1]}
,…,${hosts[${hosts[@]}}
要同时列出它们,请使用
${hosts[@]}
改用数组!
但是read
实际上可以创建动态变量,如下所示:
for i in {1..3}; do
read -p 'helo: ' var_$i
done
听起来像是数组的作业(请参见)。例如,使用
read var[0]
填充值,使用“${var[0]}”
访问值。