如何将命令输出的第二行读入bash变量?

如何将命令输出的第二行读入bash变量?,bash,Bash,我有一个打印几行的命令,我确实想把第二行放到bash变量中 像echo“AAA\nBBB”一样,我想要一个bash命令,将BBB放入bash变量中。像这样: var=$(echo -e 'AAA\nBBB' | sed -n 2p) echo $var BBB 您可以通过管道将输出通过head/tail--var=$(cmd | tail-n+2 | head-n1)调用读取两次: echo -e "AAA\nBBB" | { read line1 ; read line2 ; echo "$

我有一个打印几行的命令,我确实想把第二行放到bash变量中

echo“AAA\nBBB”
一样,我想要一个bash命令,将
BBB
放入bash变量中。

像这样:

var=$(echo -e 'AAA\nBBB' | sed -n 2p)
echo $var
BBB

您可以通过管道将输出通过head/tail--
var=$(cmd | tail-n+2 | head-n1)
调用
读取两次:

echo -e "AAA\nBBB" | { read line1 ; read line2 ; echo "$line2" ; }
请注意,您需要
{}
,因此请确保两个命令获得相同的输入流。此外,在
{}
之外无法访问变量,因此这不起作用:

echo -e "AAA\nBBB" | { read line1 ; read line2 ; } ; echo "$line2"

您可以使用
sed

SecondLine=$(Your_command |sed -n 2p)
var=$(echo -e "AAA\nBBB" | sed -n '2p')
例如:

 echo -e "AAA\nBBBB" | sed -n 2p
您可以根据要打印的行更改编号。

使用
sed

SecondLine=$(Your_command |sed -n 2p)
var=$(echo -e "AAA\nBBB" | sed -n '2p')
使用
awk

var=$(echo -e "AAA\nBBB" | awk 'NR==2')
然后简单地回显变量:

echo "$var"
在bash脚本中:
变量=
echo“AAA\nBBB”| awk“NR==2”

使用带有参数扩展的数组以避免子shell:

str="AAA\nBBB"
arr=(${str//\\n/ })
var="${arr[1]}"
echo -e "$str"

要使变量存在于块之外,请使用不涉及管道的方法:
{read line1;read line2;}<@glennjackman请在您的评论中发布您给出的答案,因为这是迄今为止给出的最好答案(所有其他变量都使用了overkill
sed
awk
tail
/
head
组合).+1表示建议使用强大的内置功能。
/
}
之间的空格是否真的有必要?是的,如果没有空格,子字符串将无法有效替换以定义单独的数组元素。