Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于值的动态变量名_Bash_Dynamic - Fatal编程技术网

Bash 基于值的动态变量名

Bash 基于值的动态变量名,bash,dynamic,Bash,Dynamic,可能是一个noob问题,但我有一个特殊的挑战,我想根据一个值动态生成变量名。如果我需要3个变量,变量名将分别动态递增var_0、var_1、var_3 我现在的解决方案是赤裸裸的。我只是使用read-p获取用户输入并将其保存到变量。因此,对于5台主机,我只复制了5次,以完成任务,但不是一个干净的解决方案。我环顾四周,通读了declare和eval,但什么也没找到 考虑一种解决方案,首先输入主机的数量,然后根据主机的数量动态拾取并请求用户输入,并保存到动态递增的变量 感谢您的帮助,干杯使用数组。但

可能是一个noob问题,但我有一个特殊的挑战,我想根据一个值动态生成变量名。如果我需要3个变量,变量名将分别动态递增var_0、var_1、var_3

我现在的解决方案是赤裸裸的。我只是使用
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]}”
访问值。