检索子 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
希望对您有所帮助。
如果我有子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
希望对您有所帮助。