检索子 shell stdout 的 first/last 行

Retrieve the first/last line of subshell stdout

如果我有子shell命令:

output="$(runfoo)";

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

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

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

标准输出和标准错误:

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

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

与bash

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

runfoo return 这样的多行结果 :

先aaa

xcv

模式3一个

bbb

最后一个qqq

inter是一个数组(inter为中介)

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

这样,

间[0]=第一

inter[1]=aaa

inter[6]=bbb

因为 IFS= 空格制表符或换行符

因此在开头将 IFS 设置为换行符

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

inter[0]=第一个aaa

inter[2]=模式 3

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

所以回显“$output”

先aaa

最后一个qqq

希望对您有所帮助。