0

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

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

我试图得到以下结果:

"SERVER1 SERVER2 SERVER3 SERVER5"
4

3 回答 3

6

以下管道通过sort具有唯一参数的程序将两个列表的组合-u

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

这给出了输出:

> echo $UNIQUE
SERVER1 SERVER2 SERVER3 SERVER5

编辑:

正如William Purcell在下面的评论中指出的那样,这用换行符分隔字符串。如果您希望再次用空格分隔,您可以通过管道将输出从 sort 传回tr '\n' ' '

> UNIQUE=$(echo "$VAR1 $VAR2" | tr ' ' '\n' | sort -u | tr '\n' ' ')
> echo "$UNIQUE"
SERVER1 SERVER2 SERVER3 SERVER5
于 2012-09-21T15:07:21.480 回答
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

将一个变量一个接一个地放置是我所知道的最简单的连接方式。也许对你的计划来说还不够。但它可以工作并且对于简单的任务很有用。它对任何变量都有用。

于 2012-09-21T15:18:01.050 回答
1

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

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

这附加到 VAR3,因此您可能需要先清除 VAR3。此外,您可能需要更加小心地将单词边界放在 grep 上,FOO如果已经在列表中,则不会添加FOOSERVER,但这是一个很好的技术。

于 2012-09-21T15:53:50.510 回答