2012-09-21 63 views
0

我有两个变量,它们的值都可以在两者中都有。我想从两个变量中创建一个唯一的列表。从Linux bash shell脚本中的两个变量创建一个唯一列表

VAR1="SERVER1 SERVER2 SERVER3" 
VAR2="SERVER1 SERVER5" 

我试图得到的结果是:通过sort方案具有独特的参数-u

"SERVER1 SERVER2 SERVER3 SERVER5" 
+0

看看http://www.linuxjournal.com/content/bash-arrays –

回答

5

下水管两个列表的组合:

UNIQUE=$(echo "$VAR1 $VAR2" | tr ' ' '\n' | sort -u) 

这给出输出:

> echo $UNIQUE 
SERVER1 SERVER2 SERVER3 SERVER5 

编辑:

William Purcell在下面的评论指出,这种分离被新线串。如果你想用空格分开你可以再次从管道回排序的输出通过tr '\n' ' '

> UNIQUE=$(echo "$VAR1 $VAR2" | tr ' ' '\n' | sort -u | tr '\n' ' ') 
> echo "$UNIQUE" 
SERVER1 SERVER2 SERVER3 SERVER5 
+2

但请注意,'$ UNIQUE'有空行的换行符。 (尝试'echo'$ UNIQUE“') –

1

当然,你必须

$ var1="a b c" 
$ result=$var1" d e f" 
$ echo $result 

随着你实现串联。

与变量

另外:

$ var1="a b c" 
$ var2=" d e f" 
$ result=$var1$var2 
$ echo $result 

为了把一个又一个变量是串联的simpliest方式,我知道了。也许你的计划是不够的。但它适用于简单任务并且非常有用。 这对任何变量都是有用的。

+3

这忽略了大部分问题,这是为了消除重复。 – chepner

1

如果你需要维持秩序,不能使用sort,但你可以这样做:

for i in $VAR1 $VAR2; do echo "$VAR3" | grep -qF $i || VAR3="$VAR3${VAR3:+ }$i"; done 

这追加到VAR3,所以你可能需要首先清除VAR3。另外,如果在列表中已经包含FOOSERVER,则不需要添加FOO,但您可能需要在grep上添加单词边界时更加小心,但这是一种很好的技术。

相关问题