我有一个这样的剧本
genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5
我想在变量中获得由genhash生成的流。我如何重定向到一个变量$哈希内比较条件?
if [ $hash -ne 0 ]
then echo KO
exit 0
else echo -n OK
exit 0
fi
我有一个这样的剧本
genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5
我想在变量中获得由genhash生成的流。我如何重定向到一个变量$哈希内比较条件?
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)
其他回答
我想合适的方式是:
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)"
如果管道太复杂,不能用$(…)来包装,可以考虑编写一个函数。定义时可用的任何局部变量都可以访问。
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 | grep MD5 | grep -c $MD5)
我得到错误时,有时使用$(' code ')构造函数。
最后,我在这里找到了一些方法:https://stackoverflow.com/a/7902174/2480481
基本上,使用Tee再次读取输出并将其放入变量中。 这就是你如何看到正常输出,然后从输出中读取它。
不是吗?我猜你当前的任务genhash会输出一个字符串散列,所以可能对你有用。
我是如此菜鸟,仍然在寻找完整的输出和保存成1命令。 的问候。
read hash < <(genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5)
该技术使用Bash的“进程替换”,不要将其与“命令替换”混淆。
这里有一些很好的参考:
http://www.linuxjournal.com/content/shell-process-redirection http://tldp.org/LDP/abs/html/process-sub.html http://tldp.org/LDP/abs/html/commandsub.html☚供比较