15

我有一个打印多行的命令,我确实想将第二行放入 bash 变量中。

喜欢echo "AAA\nBBB",我想要一个 bash 命令,它会放入BBB一个 bash 变量。

4

7 回答 7

21

sed

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

awk

var=$(echo -e "AAA\nBBB" | awk 'NR==2')

然后简单地回显您的变量:

echo "$var"
于 2012-11-29T11:33:48.700 回答
6

调用read两次:

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

请注意,您需要{}确保两个命令都获得相同的输入流。此外,在 之外无法访问变量{},因此这不起作用

echo -e "AAA\nBBB" | { read line1 ; read line2 ; } ; echo "$line2"
于 2012-11-29T11:32:39.730 回答
3

您可以使用sed

SecondLine=$(Your_command |sed -n 2p)

例如:

 echo -e "AAA\nBBBB" | sed -n 2p

根据要打印的行更改数字。

于 2012-11-29T11:33:31.010 回答
1

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

str="AAA\nBBB"
arr=(${str//\\n/ })
var="${arr[1]}"
echo -e "$str"
于 2012-11-29T12:26:42.803 回答
1

您可以通过头/尾管道输出来做到这一点 -var=$(cmd | tail -n +2 | head -n 1)

于 2012-11-29T11:32:14.407 回答
0

像这样:

var=$(echo -e 'AAA\nBBB' | sed -n 2p)
echo $var
BBB
于 2012-11-29T11:31:59.177 回答
0

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

于 2012-11-29T11:36:59.293 回答