2

我试图循环一个带有内部 HTTP 链接和换行符的字符串,我想一次循环一行。

目前我有

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

但是这样我就无法访问循环之外的 TEST_STRING,这正是我想要的。我正在使用 while 循环,以便它循环遍历 $HTTP_LINKS 中的每个换行符,而不仅仅是字符串中的单词。(我不想使用 IFS 设置为 \n 的 for 循环)

我想也许我可以做这样的事情

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

但是当然这不起作用,因为 $HTTP_LINKS 包含一个字符串而不是文件的链接。

4

2 回答 2

2

您对第二个 snipit 有正确的想法,但您需要通过<<<语法使用“Here Strings”。您无法$TEST_STRING在第一个片段之外访问,因为管道创建了一个子外壳;使用here-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
于 2010-07-05T06:57:31.130 回答
1

如果您在循环外初始化并导出 TEST_STRING 变量,您应该可以在循环后访问它。

于 2010-07-05T06:28:57.200 回答