我有两个变量,它们的值都可以在两者中都有。我想从两个变量中创建一个唯一的列表。从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 –