从Linux bash shell脚本中的两个变量创建唯一列表

时间:2012-09-21 14:56:11

标签: linux bash shell unix

我有两个变量,其值可以同时存在。我想从这两个变量中创建一个唯一的列表。

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

我想得到一个结果:

"SERVER1 SERVER2 SERVER3 SERVER5"

3 个答案:

答案 0 :(得分:6)

以下内容通过sort程序将两个列表与唯一参数-u组合在一起:

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

答案 1 :(得分: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

将变量置于另一个之后是我所知道的最简单的连接方式。也许你的计划还不够。但它有效并且对于简单的任务非常有用。 它对任何变量都很有用。

答案 2 :(得分:1)

如果您需要维护订单,则无法使用sort,但您可以这样做:

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

这会附加到VAR3,因此您可能希望首先清除VAR3。此外,您可能需要更加谨慎地将字边界放在grep上,因为如果FOO已经在列表中,则FOOSERVER将不会被添加,但这是一种很好的技术。