从bash命令输出的行作为字符串存储在变量中

时间:2013-07-05 11:47:11

标签: linux string bash output

我正在尝试找到解决类似问题的解决方案:

#command_A

A_output_Line_1
A_output_Line_2
A_output_Line_3

#command_B

B_output_Line_1
B_output_Line_2

现在我需要比较 A_output_Line_2 B_output_Line_1 ,如果它们相等则回显“正确”,否则比较“不正确”。

我想最简单的方法是在一些变量中复制一行输出,然后在执行这两个命令之后,只需比较变量并回显一些东西。 我需要在一个bash脚本中实现,任何有关如何获取存储在变量中的输出行的信息都可以帮助我将这些部分组合在一起。 此外,如果任何人不仅可以告诉我如何复制/存储一行,而且可能只是一个单词或序列,如:第1行,字节4-12,在变量中存储为字符串,那将会很酷。

我不是一个完整的初学者,但也不是高级linux bash用户附近的任何地方。感谢任何提前帮助,抱歉英语不好!

2 个答案:

答案 0 :(得分:2)

更简单的方法可能是使用diff,不是吗?

类似的东西:

command_A > command_A.output
command_B > command_B.output
diff command_A.output command_B.output

这将用于比较多个字符串。

但是,既然你想了解单行(以及行中的单词),这里有一些指示:

# first line of output of command_A
command_A | head -n 1

-n 1选项仅表示使用第一行(我认为默认值为10)

# second line of output of command_A
command_A | head -n 2 | tail -n 1

将获取command_A输出的前两行,然后是这两行中的最后一行。快乐时光:)

您现在可以将此信息存储在变量中:

export output_A=`command_A | head -n 2 | tail -n 1`
export output_B=`command_B | head -n 1`

然后比较一下:

if [ "$output_A" == "$output_B" ]; then echo 'Correct'; else echo 'Not Correct'; fi

要获取字符串的部分内容,请尝试查看cut或(更强大的内容)sedawk

此外,只需学习一个好的通用脚本语言,例如pythonruby(偶数perl),就可以解决这类问题。

答案 1 :(得分:0)

使用IFS(内部字段分隔符)分隔换行符并将输出存储在数组中。

#!/bin/bash

IFS='
'
array_a=( $(./a.sh) )
array_b=( $(./b.sh) )

if [ "${array_a[1]}" = "${array_b[0]}" ]; then
    echo "CORRECT"
else
    echo "INCORRECT"
fi