我有一个有两个多行字符串的脚本。我想知道它们是否相等。我还没有找到一种方法来做到这一点,因为虽然比较很容易,但将变量的值传递给比较 thingamajig 却不是。我还没有成功地通过管道将其引导到差异,但这可能是我的无能(我尝试过的许多事情都导致"文件名太长"错误)。解决方法是用一些罕见的字符替换换行符,但它遇到了大致相同的问题。有什么想法吗?
使用sh
也绝对可以比较多行字符串。特别是,无需使用 md5sum
或其他类似机制对字符串进行哈希处理。
演示:
$ cat /tmp/multiline.sh
#!/bin/sh
foo='this
is
a
string'
bar='this
is not
the same
string'
[ "$foo" = "$foo" ] && echo SUCCESS || echo FAILURE
[ "$foo" != "$bar" ] && echo SUCCESS || echo FAILURE
$ /tmp/multiline.sh
SUCCESS
SUCCESS
在bash
你可以(并且通常应该)使用[[ ... ]]
而不是[ ... ]
,但它们仍然支持多行字符串。
这可能会有所帮助:
var=$(echo -e "thisnis nanstring" | md5sum)
var2=$(echo -e "thisnis notnanstring" | md5sum)
if [[ $var == $var2 ]] ; then echo true; else echo false; fi
与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"
}