检索subshel​​l stdout的第一行/最后一行

时间:2018-03-04 07:58:04

标签: bash shell subshell

如果我有子shell命令:

.findOne()

是否可以将output="$(runfoo)"; 的输出的最后一行存储到变量runfoo中?或者也许只有第一行?

2 个答案:

答案 0 :(得分:5)

output="$(runfoo | tail -n 1)"

output="$(runfoo | head -n 1)"

Stdout和stderr:

output="$(runfoo 2>&1 | tail -n 1)"

output="$(runfoo 2>&1 | head -n 1)"

答案 1 :(得分:1)

使用bash

IFS=$'\n' output=$(inter=($(runfoo))
printf '%s\n' "${inter[0]}" "${inter[((${#inter[@]}-1))]}")
echo "$output"

runfoo返回多行结果:

首先是aaa

XCV

pattern3 a

BBB

最后qqq

inter是一个数组(inter for intermed)

inter =($(runfoo))获取runfoo命令'$(runfoo)'的结果 在数组中inter =($(...))

这样,

间[0] =第一

间[1] = AAA

间[6] = BBB

因为IFS =空格标签或换行符

所以在开始时将IFS设置为换行符

数组inter的每个项目都是一行文本

inter [0] = first aaa

inter [2] = pattern 3

output = $(创建一个数组并打印此数组的第一项和最后一项)

所以回声“$ output”

首先是aaa

最后qqq

希望得到这个帮助。