2017-03-23 51 views
0

我有一个变量如何在bash中将变量的值传递给管道?

THING="echo '3'; echo '5'; echo '4'; echo '3';" 

,我想把它推到像管道:

THING2=$({ $THING } | /peep.exe) 

我该怎么做呢?当我尝试第一个时,它给了我一些错误,但是当我尝试它时:

THING2=$({ echo '3'; echo '5'; echo '4'; echo '3'; } | ./peep.exe) 

它工作正常。

+0

问题在于你的第一个'echo'处理行'3'的其余部分;回声'5';回声'4'; echo'3';“'作为它的参数,所以不让shell将它们解释为随后的命令。 – GavinBrelstaff

+1

阅读[Bash FAQ 050](http://mywiki.wooledge.org/BashFAQ/050)。 – chepner

回答

2

不要使用变量代码;使用功能。

thing() { 
    echo '3' 
    echo '5' 
    echo '4' 
    echo '3' 
} 

thing2=$(thing | /peep.exe) 
+2

IMO,它是有害的,因为它验证了一种不必要的方法,人们看到'eval'的一种用法,不明白*为什么*在这种情况下是可以的,并且试图在不安全的情况下应用它。直到你*真的需要它(对于大多数人来说这是“从不”) – chepner

+0

(前面是回应现在删除的评论,询问在这种情况下使用'eval') – chepner

+0

如果我想生成很多还有很多回声与数字?就像做一个循环,产生从0到1000的1000回声?我怎么能坚持到功能? 基本上,我试图管道1000回声命令。 –

0

如果你正打算做的是通过文本字符串“回声‘3’......”等,以在管道中的下一个应用程序,那么这段代码就足够了。

如果您打算只传递3,5,4,3个数字,那么@Chepner的回复将会执行。

希望这对你有好处。

THING="echo '3'; echo '5'; echo '4'; echo '3';" 
echo "$THING" 

THING2=$(echo "$THING" | grep "3") 
echo "$THING2" 
相关问题