Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用重定向到其中的字符串执行while循环_Linux_Bash_Newline_While Loop_Delimiter - Fatal编程技术网

Linux 如何使用重定向到其中的字符串执行while循环

Linux 如何使用重定向到其中的字符串执行while循环,linux,bash,newline,while-loop,delimiter,Linux,Bash,Newline,While Loop,Delimiter,我试图循环一个包含HTTP链接的字符串和换行符,我想一次循环一行 目前我有 echo -e "$HTTP_LINKS" | while read HTTP_S_LINK ; do TEST_STRING="test" done 但这样我就不能访问循环外的测试字符串,这正是我想要的。 我使用while循环,这样它就可以循环通过$HTTP_链接中的每一个新行,而不仅仅是字符串中的单词。(我不想在IFS设置为的情况下使用for循环\n) 我想也许我可以这样做 #!/bin/bash whil

我试图循环一个包含HTTP链接的字符串和换行符,我想一次循环一行

目前我有

echo -e "$HTTP_LINKS" | while read HTTP_S_LINK ; do
    TEST_STRING="test"
done
但这样我就不能访问循环外的测试字符串,这正是我想要的。 我使用while循环,这样它就可以循环通过$HTTP_链接中的每一个新行,而不仅仅是字符串中的单词。(我不想在IFS设置为的情况下使用for循环\n)

我想也许我可以这样做

#!/bin/bash
while read HTTP_S_LINKS
do   
    TEST_STRING="test2"
done < $HTTP_LINKS
#/bin/bash
在阅读HTTP\u S\u链接时
做
TEST_STRING=“test2”
完成<$HTTP\u链接

但是当然,这不起作用,因为$HTTP\u LINKS包含一个字符串,而不是指向文件的链接。

如果在循环外部初始化并导出TEST\u string变量,则在循环之后应该可以访问它

你的第二个snipit的想法是正确的,但是你需要通过
使用“Here Strings”,我在循环之前完成了“export TEST_STRING=0”,但是$TEST_STRING在循环之后仍然返回0。不需要导出,只是不要使用创建子shell(也称为管道)的构造。这不是导出的工作方式,也不是它的用途。它是用来将变量放入子进程,而不是从子进程中取出的。啊,就是这样,一个子外壳。我知道有一个词,我只是忘了它是什么。所以是3个重定向,嗯。谢谢你有什么链接可以让我进一步阅读3个重定向的内容吗?@Mint:这不是“3个重定向”,

#!/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