微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 从管道中将值读入shell变量

我试图让bash处理来自stdin的数据,但是没有运气.我的意思是以下工作:

echo "hello world" | test=($(< /dev/stdin)); echo test=$test
test=

echo "hello world" | read test; echo test=$test
test=

echo "hello world" | test=`cat`; echo test=$test
test=

我希望输出为test = hello world.我已经尝试在“$test”周围加上“引号”,这也不起作用.

解决方法:

使用

IFS= read var << EOF
$(foo)
EOF

您可以通过这样的管道欺骗读取接受:

echo "hello world" | { read test; echo test=$test; }

甚至写一个这样的函数

read_from_pipe() { read "$@" <&0; }

但没有意义 – 你的变量任务可能不会持久!管道可以生成子shell,其中环境由值继承,而不是通过引用继承.这就是为什么读取不会打扰管道的输入 – 它是未定义的.

仅供参考,http://www.etalabs.net/sh_tricks.html一个漂亮的收藏品,用于对抗伯恩贝壳的奇怪和不相容性.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐