如何将命令输出的第二行读入bash变量?
我有一个打印几行的命令,我确实想把第二行放到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 "$
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请在您的评论中发布您给出的答案,因为这是迄今为止给出的最好答案(所有其他变量都使用了overkillsed
或awk
或tail
/head
组合).+1表示建议使用强大的内置功能。/
和}
之间的空格是否真的有必要?是的,如果没有空格,子字符串将无法有效替换以定义单独的数组元素。