比较bash中两个变量的内容
我在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
$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)