gpt4 book ai didi

linux - 使用 for 循环设置变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:36 25 4
gpt4 key购买 nike

我似乎无法在我的 shell 脚本中分配一堆变量。我试图将 HOST1、HOST2、HOST3 分配给三个不同的机器名称。

我的脚本如下:

   #!/bin/bash
#
set -vx

FIXHOSTS=`cat /tmp/fixHosts.txt`
NUMBER=1
NUMBEROFHOSTS=`cat /tmp/fixHosts.txt | wc -l`

for line in $FIXHOSTS
do
HOST$NUMBER=$line
echo $HOST1
((NUMBER = $NUMBER + 1))
done

echo $HOST1
echo $HOST2
echo $HOST3
echo $HOST4

fixHosts.txt 包含以下内容:

      wayne-000
wayne-002
wayne-003

这是我得到的输出:

for line in $FIXHOSTS
do
HOST$NUMBER=$line
echo $HOST1
((NUMBER = $NUMBER + 1))
done
+ for line in '$FIXHOSTS'
+ HOST1=wayne-000
fvwmtest.sh: line 15: HOST1=wayne-000: command not found
+ echo

+ (( NUMBER = 1 + 1 ))
+ for line in '$FIXHOSTS'
+ HOST2=wayne-002
fvwmtest.sh: line 15: HOST2=wayne-002: command not found
+ echo

+ (( NUMBER = 2 + 1 ))
+ for line in '$FIXHOSTS'
+ HOST3=wayne-003
fvwmtest.sh: line 15: HOST3=wayne-003: command not found
+ echo

+ (( NUMBER = 3 + 1 ))

#done

echo $HOST1
+ echo

echo $HOST2
+ echo

echo $HOST3
+ echo

echo $HOST4
+ echo

为什么他们不回应?为什么他们没有被分配?

最佳答案

动态变量在 bash 中可能会很烦人。 declare 命令可以帮助:

$ num=13
$ val="hello world"
$ declare "host$num=$val"
$ echo $host13
hello world

所以你想要:

num=0
while read -r line; do
((num++))
declare host$num="$line"
done < /tmp/fixHosts.txt
num_hosts=$num

echo $host1 $host2 $host3 ...

注意事项:

更简单的是使用数组:如果你有 bash 版本 4

mapfile -t hosts < /tmp/fixHosts.txt
num_hosts=${#hosts[@]}
echo ${hosts[0]} ${hosts[1]} ${hosts[2]} ...

关于linux - 使用 for 循环设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com