簡體   English   中英

從Linux bash Shell腳本中的兩個變量創建唯一列表

[英]Create a unique list from two variables in a Linux bash shell script

我有兩個變量,它們的值可以都在這兩個變量中。 我想根據兩個變量創建一個唯一列表。

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

我正在嘗試得到以下結果:

"SERVER1 SERVER2 SERVER3 SERVER5"

以下通過唯一參數-u通過sort程序通過管道傳遞兩個列表的組合:

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

當然你有

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

這樣就可以實現串聯。

還帶有變量:

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

我知道,將一個變量接一個變量是最簡單的串聯方式。 也許您的計划還不夠。 但是它可以工作,並且對簡單的任務很有用。 這對於任何變量都將是有用的。

如果需要維護訂單,則不能使用sort ,但是可以執行以下操作:

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

這會附加到VAR3,因此您可能要先清除VAR3。 另外,在grep上放置單詞邊界時,您可能需要格外小心,因為如果FOOSERVER已經在列表中,則不會添加FOO ,但這是一種好方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM