2015-12-21 1 views
0

У меня есть файл, содержащие пару слов, как:передать несколько аргументов из файла, в то время как цикл в Shell

server1 location1 
server2 location2 

мне нужно передать их в цикле.

Как мы можем назначить их двум отдельным переменным? Что-то вроде этого может быть

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

Я могу работать с 1 переменной очень хорошо, но не мог понять этот.

Любая помощь будет оценена по достоинству.

ответ

1

Вы должны использовать пространство между переменными, а не запятая:

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

Обратите внимание, что первое слово будет читаться в server и «все остальное» будет идти в location. Так что, если ваш файл случается содержать более двух слов, то вы можете игнорировать остальное с переменным в фиктивной:

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

вы в состоянии разобрать весь файл, используя 'повторно ad', не отбрасывая остальную часть линии? Я думаю, что это то, о чем идет OP. – mhawke

+0

Я отредактировал сообщение, чтобы сделать его понятным (вы можете видеть из истории изменений для того, что OP хотел спросить). Он * выглядел так, как вы говорите. Но из-за плохого форматирования в этом вопросе. Сожалею! –

+0

Возможно, мне что-то не хватает, но я не вижу этого в истории редактирования. Я вижу, что вы отредактировали вопрос не OP ??? – mhawke

0

Я немного ржавый с помощью сценариев оболочки, так что я сомневаюсь, что это лучшее путь, но вы можете сделать это следующим образом:

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 
Смежные вопросы