首页 > 解决方案 > 管道 | 在bash用法中?

问题描述

我正在学习 BASH,我的问题如下。

我正在使用 解压缩文件tar -zxvf,这会返回一个(我认为)是ls -l从它被提取的文件夹中的列表类型。我想要做的是使用它的第一个对象head -1

我可以做到这一点,但为了保持我的代码干净,我想使用管道来做到这一点。

这有效:

filename_2=$(tar zxvf ${filename}) 
echo "${filename_2}" | head -1

这不会(它返回一个空字符串):

filename_2=$(tar zxvf ${filename}) | head -1
echo "${filename_2}"

我对管道概念的理解有误吗?我认为它只是将最后一个函数的输入作为最后一个函数的输入,如果是这样,为什么我需要在两个单独的行中进行呢?

谢谢

标签: bash

解决方案


你根本不需要这个变量。将 的输出tar直接传递给head

tar zxvf "$filename" | head -1

如果您想将该结果保存在一个变量中,您可以编写:

filename_2=$(tar zxvf "$filename" | head -1)
echo "$filename_2"

推荐阅读