2012-09-21 81 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上添加單詞邊界時更加小心,但這是一種很好的技術。

相關問題