1
我似乎不能在shell腳本中分配一堆變量。我試圖將HOST1,HOST2,HOST3分配給三個不同的機器名稱。使用for循環設置變量
我的腳本如下:
#!/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不支持動態變量,這是一個數組的作業。 @fedorqui這與OP通過全名解決變量無關。 – 123
你*可以*用'printf -v'和'declare'做這個,但是不要。只需使用一個數組。另外[不要用'for'讀取行](http://mywiki.wooledge.org/DontReadLinesWithFor),如果你最初將文件讀入數組,你不會有任何這些問題或需要做任何事情那首先。關於如何逐行讀取文件和[Bash FAQ 005](http://mywiki.wooledge.org/BashFAQ),請參見[Bash FAQ 001](http://mywiki.wooledge.org/BashFAQ/001)/005#Loading_lines_from_a_file_or_stream)如何將文件讀入數組。 –