如何将输出redirect到shell中的variables?
我有这样的脚本
genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5  我想要得到一个variablesgenhash生成的stream。 我如何redirect到一个variables$hash比较里面的条件? 
 if [ $hash -ne 0 ] then echo KO exit 0 else echo -n OK exit 0 fi 
	
 使用$( ... )构造: 
 hash=$(genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5) 
当然,所有这些其他的答案都显示了不要做OP所要求的方法,但是这真的使我们其他人searchOP的问题变得麻烦。
 这个问题的答案是使用read命令。 
这是你如何做到的
 # I would usually do this on one line, but for readability... series | of | commands \ | \ ( read string; mystic_command --opt "$string" /path/to/file ) \ | \ handle_mystified_file 
这是它在做什么,为什么它是重要的:
- 
让我们假装 series | of | commandsseries | of | commandsseries | of | commands是一个非常复杂的pipe道命令序列。
- 
mystic_command可以接受一个文件的内容作为标准input代替文件path,而不是--optarg,因此它必须作为一个variables进来。 该命令输出修改后的内容,通常会被redirect到一个文件或者通过pipe道传送到另一个命令。 (例如sed,awk,perl等)
- 
readstdin并将其放入variables$string
- 
通过括号把 read和mystic_command放到一个“sub shell”中是没有必要的,但是它使得它像一个连续的pipe道一样stream动,就像2个命令在单独的脚本文件中一样。
总是有另一种select,在这种情况下,替代是丑陋的和不可读的:
 mystic_command --opt "$(series | of | commands)" /path/to/file | handle_mystified_file 
相比
 series | of | commands | (read string; mystic_command --opt "$string" /path/to/file) | handle_mystified_file 
这完全是按时间顺序和逻辑的。
 read hash < <(genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5) 
这种技术使用Bash的“ 过程replace ”不要与“ 命令replace ”混淆。
这里有几个很好的参考:
我猜兼容的方式:
 hash=`genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5` 
但是我更喜欢
 hash="$(genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5)" 
 如果一个stream水线太复杂,无法包装在$(...) ,可以考虑编写一个函数。 定义时可用的任何局部variables都可以访问。 
 function getHash { genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5 } hash=$(getHash) 
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Functions
你可以做:
 hash=$(genhash --use-ssl -s $IP -p 443 --url $URL) 
要么
 hash=`genhash --use-ssl -s $IP -p 443 --url $URL` 
如果要将整个pipe道的结果分配给该variables,则可以在上述任务中使用整个pipe道。
 有时我使用$(`code`)构造函数时出错。 
最后我在这里得到了一些方法: https : //stackoverflow.com/a/7902174/2480481
基本上,使用三通来读取输出并将其放入一个variables。 Theres你如何看到正常的输出,然后从输出中读取它。
不是? 我猜你目前的任务genhash会输出这个,一个单一的string散列,所以可能会为你工作。
我如此neewbie仍然在寻找完整的输出和保存到1命令。 问候。