比较bash变量中的多行字符串

时间:2016-05-30 10:34:14

标签: string bash pipe

我有一个带有两个多行字符串的脚本。我想知道他们是否平等。我还没有找到办法做到这一点,因为虽然比较很容易,但是将变量的值传递给比较thingamajig则不然。我没有成功地将它用于差异,但它可能是我的无能(我尝试过的许多事情导致'文件名太长'错误)。一种解决方法是用一些罕见的角色替换换行符,但它遇到了同样的问题。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

这可能会有所帮助:

var=$(echo -e "this\nis \na\nstring" | md5sum)
var2=$(echo -e "this\nis not\na\nstring" | md5sum)
if [[ $var == $var2 ]] ; then echo true; else echo false; fi

答案 1 :(得分:2)

batsbats-assert一起工作时,我向@dimo414提出了解决方案(支持他的回答)

@test "craft a word object" {
  touch "$JSON_FILE"
  entry=$(cat <<-MOT
  {
    "key": "bonjour",
    "label": "bonjour",
    "video": "video/bonjour.webm"
  },
MOT
)

  run add_word "bonjour"

  content=$(cat $JSON_FILE)
  assert_equal "$entry" "$content"
}

答案 2 :(得分:1)

即使您正在使用sh,您也绝对可以比较多行字符串。特别是,不需要使用md5sum或其他类似机制来散列字符串。

演示:

$ cat /tmp/multiline.sh
#!/bin/sh

var='this
is
a
string'

var2='this
is not
a
string'

[ "$var" = "$var" ]   && echo SUCCESS || echo FAILURE
[ "$var" != "$var2" ] && echo SUCCESS || echo FAILURE

$ /tmp/multiline.sh
SUCCESS
SUCCESS

bash中,您可以(通常应该)使用[[ ... ]]代替[ ... ],但后者仍然支持多行字符串。