比较bash中两个变量的内容

比较bash中两个变量的内容,bash,diff,Bash,Diff,我在bash脚本中有一个变量$data和变量$file: data=$(echo "$(printf '%s\n' "${array[@]/%/$'\n\n'}")") file=$(<scriptfile_results) data=$(echo“$(printf'%s\n'${array[@]/%/$'\n\n'}”)) 文件=$( 如果您希望长篇大论,还可以执行以下操作: if test "$data" = "$file"; then : variables are the s

我在bash脚本中有一个变量
$data
和变量
$file

data=$(echo "$(printf '%s\n' "${array[@]/%/$'\n\n'}")")
file=$(<scriptfile_results)
data=$(echo“$(printf'%s\n'${array[@]/%/$'\n\n'}”))
文件=$(
如果您希望长篇大论,还可以执行以下操作:

if test "$data" = "$file"; then
  : variables are the same
else
  : variables are different
fi

是的,
diff这最适合我:

var1="cat dog mule pig"
var2="cat dog ant"

diff <( echo "$var1" ) <( echo "$var2" )
var1=“猫-狗-骡-猪”
var2=“猫-狗-蚂蚁”
差异
~cat test.sh
#!/usr/bin/env bash
阵列1=(猫-狗-骡-猪)
array2=(猫-狗-蚂蚁)

diff-ia——使用
comm
抑制公共线:

comm -23 <(echo $variableA | tr ' ' '\n' | sort) <(echo $variableB | tr ' ' '\n' | sort)

comm-23有没有一种方法可以在2个变量而不是2个文件上使用
diff
,而不用将它们写入临时文件?我以前确实很想知道这一点。(所以你可以看到它们之间的区别)@据我所知,没有。不过,如果有经验丰富的bash程序员能证实这一点,那就太好了。谢谢你在我的Xeon上解释这一点X3220@2.40GHz'我在{0..1000}的时间到了;do echo注意,即使
echo foo>foo;cat foo;rm foo
也不太可能接触到磁盘。如果在vfs刷新到物理分区之前删除tempfile,则任何内容都不会进入磁盘。您的echo在第一行需要-e。感谢您的回答!!@bunnyrules我认为
-e
不会有帮助在这里,因为它会使文本字符串
foo\tbar
foo bar
比较相等,即使它们是不同长度的不同字符串。你有什么例子吗?@andrewdotn,我错误地认为需要在变量中展开换行符,但我昨天用echo玩了一下,结果是不需要。它仅用于展开用户添加的换行符和选项卡(如\n或\t),而不需要展开变量通过var=$定义后继承的换行符(某些操作)。如果我可以撤回编辑,我会这样做,但一旦提交,它就超出了我的控制范围。请随意拒绝它。您可以使用结果、创建变量等进行操作。例如,我的版本打印出一个差异。只需尝试一下。不会有任何伤害。
$ echo <(echo foo)
/dev/fd/63
echo <(echo foo) <(echo foo) ... 997 repetitions ... <(echo foo)
var1="cat dog mule pig"
var2="cat dog ant"

diff <( echo "$var1" ) <( echo "$var2" )
~ cat test.sh   

#!/usr/bin/env bash

array1=(cat dog mule pig)
array2=(cat dog ant)

diff -ia --suppress-common-lines <( printf "%s\n" "${array1[@]}" ) <( printf "%s\n" "${array2[@]}" )
comm -23 <(echo $variableA | tr ' ' '\n' | sort) <(echo $variableB | tr ' ' '\n' | sort)