Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
在KornShell中构建动态变量名_Shell_Variables_Dynamic_Ksh - Fatal编程技术网

在KornShell中构建动态变量名

在KornShell中构建动态变量名,shell,variables,dynamic,ksh,Shell,Variables,Dynamic,Ksh,我做了一次搜索,但没有找到任何和我想做的完全一样的东西。 我有一个服务器主机名和IP的列表 服务器A | IPa 服务器B | IPb 服务器n | IPn 我想对这个文件进行分类,并将每个元素放入变量中 服务器变量1 IP_Var_1 服务器变量2 IP_Var_2 服务器变量 IP_Var_n 我目前拥有的是以下KornShell(ksh): 非常感谢您的帮助。$cat hostfile $ cat hostfile server1 | 192.168.1.101 server2 |

我做了一次搜索,但没有找到任何和我想做的完全一样的东西。 我有一个服务器主机名和IP的列表

  • 服务器A | IPa
  • 服务器B | IPb
  • 服务器n | IPn
我想对这个文件进行分类,并将每个元素放入变量中

  • 服务器变量1
  • IP_Var_1
  • 服务器变量2
  • IP_Var_2
  • 服务器变量
  • IP_Var_n
我目前拥有的是以下KornShell(ksh):

非常感谢您的帮助。

$cat hostfile
$ cat hostfile
server1 | 192.168.1.101
server2 | 192.168.1.102
server3 | 192.168.1.103
$ cat foo
#!/bin/sh

counter=0
while IFS=" |" read name ip; do
    eval Server_VAR_$counter=$name
    eval IP_VAR_$counter=$ip
    : $(( counter += 1 ))
done < hostfile

echo $Server_VAR_0:$IP_VAR_0
echo $Server_VAR_1:$IP_VAR_1
echo $Server_VAR_2:$IP_VAR_2
$ ./foo
server1:192.168.1.101
server2:192.168.1.102
server3:192.168.1.103
服务器1 | 192.168.1.101 服务器2 | 192.168.1.102 服务器3 | 192.168.1.103 $catfoo #!/垃圾箱/垃圾箱 计数器=0 而IFS=“|”读取名称ip;做 eval Server_VAR_u$counter=$name eval IP_VAR_$计数器=$IP :$((计数器+=1)) 完成
对原来的问题有一点小小的改变(由@William Pursell完美地回答了这个问题)。因此,这段代码将产生相同的输出,但使用一个复合变量数组。请注意,这是特定于ksh93的

$cat read\u hostvars
#!/垃圾箱/垃圾箱
计数器=0
打字机-服务器
而IFS=“|”读取名称ip;做
服务器[计数器]。名称=$name
服务器[计数器]。ip=$ip
((计数器++))
完成
由于过于挑剔,OP要求变量从1开始,而不是从零开始
计数器=1
。递增计数器可以简单地写为
((计数器+=1))
@cdarke
((计数器+=1))
是一种bashim(这是一个奇数词,用于一个可能在ksh中工作,也可能不在ksh中工作(如在我不知道中)),但是
:$((计数器+=1))
是posix。您的posix点被接受
((counter+=1))
甚至出现在ksh88中,因此它早于bash,并且这个问题被标记为引用ksh。可惜它不在POSIX中。
$ cat hostfile
server1 | 192.168.1.101
server2 | 192.168.1.102
server3 | 192.168.1.103
$ cat foo
#!/bin/sh

counter=0
while IFS=" |" read name ip; do
    eval Server_VAR_$counter=$name
    eval IP_VAR_$counter=$ip
    : $(( counter += 1 ))
done < hostfile

echo $Server_VAR_0:$IP_VAR_0
echo $Server_VAR_1:$IP_VAR_1
echo $Server_VAR_2:$IP_VAR_2
$ ./foo
server1:192.168.1.101
server2:192.168.1.102
server3:192.168.1.103