在Shell

时间:2015-12-21 11:30:41

标签: linux bash shell

我有一个包含几个单词的文件,如:

server1 location1
server2 location2

我需要在while循环中传递它们。

我们如何将它们分配给两个独立的变量?这样的事情可能是

while read server,location
do
echo $server is in $location
done <file

我能够很好地使用1变量,但无法弄清楚这个。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您需要在变量之间使用空格,而不是逗号:

while read -r server location
do
echo "${server}" is in "${location}"
done <file

请注意,第一个字将被读入server和&#34;其他所有内容&#34;将进入location。因此,如果您的文件恰好包含两个以上的单词,那么您可能希望忽略其余的 dummy 变量:

while read -r server location dummy
do
echo "${server}" is in "${location}"
done <file

答案 1 :(得分:1)

我对shell脚本有点生疏,所以我怀疑这是最好的方法,但你可以这样做:

set $(cat file)
while [ $# -gt 0 ]
do
    echo $1 is in $2
    shift 2
done

另一种方法是使用awk

awk '{for (i=1; i<NF; i+=2) printf "%s is in %s\n", $i, $(i+1);}' file