2013-06-23 4 views
1

Я пытаюсь передать две строки в цикл while, но я забыл синтаксис, пожалуйста, помогите мне. Это то, что я trying-Передача строк во время цикла

#!/bin/bash 
while read line 
do 
    echo "successful" 
done < "var1" "var2" 
exit 

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

Я знаю -

#!/bin/bash 
while read line 
do 
    echo "successful" 
done < "file_containing_var1_and_var2" 

, но я хочу передать строки, а не файл в то время как цикл, любая помощь.

ответ

5

< оператор перенаправления работает только с файлами. для вашего требования использовать for loop

#!/bin/bash 


for x in "var1" "var2" 
do 
    echo $x 
done 
1

Вы можете трубы в время цикла:

#!/bin/bash 
echo "var1" "var2" | while read line 
do 
    echo "successful: $line" 
    set "$line" 
    echo "v1: $1 v2: $2" 
done 

Выходной:

successful: var1 var2 
v1: var1 v2: var2 
+0

Спасибо perreal, jonathan и DevZero, ваши ответы добавили что-то новое в мой хранилище. Спасибо за ваше время. – user2118349

+0

В случае, если строка $ начинается с дефиса, 'set - $ line' (unquoted) –

2
printf "%s\n" "var1" "var2" | 
while read line 
do 
    echo "successful: $line" 
done 

Команда printf повторяет каждый аргумент на линия сама по себе.

4

Чтобы передать строку в ваш цикл while, вы должны использовать нотацию herestring <<<.

$ while read line; do 
    echo "$line" 
done <<< "This is my test line" 
This is my test line 
+0

Привет JS. Это именно то, что я хотел. можете ли вы указать, как я могу передать более одной строки здесь. – user2118349

+0

@ user2118349 Вам лучше использовать 'for loop', как предложено DevZer0, но если вам нужно, вы можете сделать что-то вроде:' $ while IFS =: read string1 string2; do printf "% s \ n% s \ n" "$ string1" "$ string2"; done <<< "это моя строка": "это еще одна строка" ' –

Смежные вопросы