Как сделать цикл while со строкой, перенаправленной в него - PullRequest
2 голосов
/ 05 июля 2010

Я пытаюсь зациклить строку с HTTP-ссылками внутри и новыми строками, я хочу зациклить строку за раз.

На данный момент у меня есть

echo -e "$HTTP_LINKS" | while read HTTP_S_LINK ; do
    TEST_STRING="test"
done

Но этоУ меня нет доступа к TEST_STRING вне цикла, что я и хочу.Я использую цикл while, чтобы он повторял каждую новую строку в $ HTTP_LINKS, а не только слова в строке.(Я не хочу использовать цикл for с IFS, установленным в \ n)

Я подумал, может быть, я мог бы просто сделать что-то вроде этого

#!/bin/bash
while read HTTP_S_LINKS
do   
    TEST_STRING="test2"
done < $HTTP_LINKS

Но, конечно, это не такРабота как $ HTTP_LINKS содержит строку, а не ссылку на файл.

Ответы [ 2 ]

2 голосов
/ 05 июля 2010

У вас была правильная идея с вашим вторым фрагментом, но вам нужно использовать Here Strings через синтаксис <<<.Вы не можете получить доступ к $TEST_STRING за пределами своего первого сниппита, потому что канал создает субоболочку;использование здесь-строки не делает.Кроме того, убедитесь, что вы указали "$HTTP_LINKS", иначе вы потеряете символы новой строки.

#!/bin/bash

HTTP_LINKS=$(echo -e "http://www.aaa.com\nhttp://www.bbb.com")

unset TEST_STRING; 

while read url; 
do 
    ((TEST_STRING++))
done <<<"$HTTP_LINKS"

echo $TEST_STRING

Вывод

2
1 голос
/ 05 июля 2010

Если вы инициализируете и экспортируете переменную TEST_STRING вне цикла, у вас должен быть доступ к ней после цикла.

...