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

问题描述 投票:0回答:2

如果我有一个subshel​​l命令:

output="$(runfoo)";

有没有办法只将runfoo输出的最后一行存储到变量output中?或者也许只有第一行?

bash shell subshell
2个回答
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
投票

随着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为中介)

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

这条路,

间[0] =第一

Inter [1] = IE

inter [6] = bbb

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

因此,在开始时将IFS设置为换行符

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

inter [0] =第一个aaa

inter [2] =模式3

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

所以回声“$ output”

首先是aaa

最后qqq

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.