我有一个带有两个多行字符串的脚本。我想知道他们是否平等。我还没有找到办法做到这一点,因为虽然比较很容易,但是将变量的值传递给比较thingamajig则不然。我没有成功地将它用于差异,但它可能是我的无能(我尝试过的许多事情导致'文件名太长'错误)。一种解决方法是用一些罕见的角色替换换行符,但它遇到了同样的问题。有什么想法吗?
答案 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)
与bats
和bats-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
中,您可以(通常应该)使用[[ ... ]]
代替[ ... ]
,但后者仍然支持多行字符串。