我有兩個變量,它們的值都可以在兩者中都有。我想從兩個變量中創建一個唯一的列表。從Linux bash shell腳本中的兩個變量創建一個唯一列表
VAR1="SERVER1 SERVER2 SERVER3"
VAR2="SERVER1 SERVER5"
我試圖得到的結果是:通過sort
方案具有獨特的參數-u
"SERVER1 SERVER2 SERVER3 SERVER5"
我有兩個變量,它們的值都可以在兩者中都有。我想從兩個變量中創建一個唯一的列表。從Linux bash shell腳本中的兩個變量創建一個唯一列表
VAR1="SERVER1 SERVER2 SERVER3"
VAR2="SERVER1 SERVER5"
我試圖得到的結果是:通過sort
方案具有獨特的參數-u
"SERVER1 SERVER2 SERVER3 SERVER5"
下水管兩個列表的組合:
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
但請注意,'$ UNIQUE'有空行的換行符。 (嘗試'echo'$ UNIQUE「') –
當然,你必須
$ 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方式,我知道了。也許你的計劃是不夠的。但它適用於簡單任務並且非常有用。 這對任何變量都是有用的。
這忽略了大部分問題,這是爲了消除重複。 – chepner
如果你需要維持秩序,不能使用sort
,但你可以這樣做:
for i in $VAR1 $VAR2; do echo "$VAR3" | grep -qF $i || VAR3="$VAR3${VAR3:+ }$i"; done
這追加到VAR3,所以你可能需要首先清除VAR3。另外,如果在列表中已經包含FOOSERVER
,則不需要添加FOO
,但您可能需要在grep上添加單詞邊界時更加小心,但這是一種很好的技術。
看看http://www.linuxjournal.com/content/bash-arrays –