【问题标题】:Line from bash command output stored in variable as string来自 bash 命令输出的行以字符串形式存储在变量中
【发布时间】:2013-07-05 11:47:10
【问题描述】:

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

#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_2B_output_Line_1,如果相等则回显“正确”,否则回显“不正确”。

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

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

【问题讨论】:

  • 在SO上注册时,应该有一个问题:How did you come to know about us?
  • grepsedawkcut 可能是有助于做你想做的事情的命令。手册页应该有所帮助,并且几乎所有内容的许多示例都在 Internet 上共享。 :)

标签: linux string bash output


【解决方案1】:

更简单的方法可能是使用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),就可以解决这类问题。

【讨论】:

【解决方案2】:

使用 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

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 2014-11-09
    • 1970-01-01
    • 2021-10-18
    • 2017-11-28
    • 2012-04-03
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多