我有两个变量,它们的值可以同时存在于这两个变量中。我想从这两个变量中创建一个唯一的列表。
VAR1="SERVER1 SERVER2 SERVER3" VAR2="SERVER1 SERVER5"
我正在尝试获得以下结果:
"SERVER1 SERVER2 SERVER3 SERVER5"
34gzjxbg1#
以下代码通过sort程序使用唯一参数-u传输两个列表的组合:
sort
-u
UNIQUE=$(echo "$VAR1 $VAR2" | tr ' ' '\n' | sort -u)
这给出了输出:
> echo $UNIQUE SERVER1 SERVER2 SERVER3 SERVER5
正如William Purcell在下面的注解中所指出的,这会用换行符分隔字符串,如果你想再次用空格分隔,你可以通过tr '\n' ' '将sort的输出传输回去:
tr '\n' ' '
> UNIQUE=$(echo "$VAR1 $VAR2" | tr ' ' '\n' | sort -u | tr '\n' ' ') > echo "$UNIQUE" SERVER1 SERVER2 SERVER3 SERVER5
e1xvtsh32#
当然你有
$ var1="a b c" $ result=$var1" d e f" $ echo $result
这样你就完成了连接。还具有变量:
$ var1="a b c" $ var2=" d e f" $ result=$var1$var2 $ echo $result
把一个变量放在另一个变量之后是我所知道的最简单的连接方式。也许对你的计划来说还不够。但是它对简单的任务很有效。它对任何变量都很有用。
unhi4e5o3#
如果需要维护顺序,则不能使用sort,但可以执行以下操作:
for i in $VAR1 $VAR2; do echo "$VAR3" | grep -qF $i || VAR3="$VAR3${VAR3:+ }$i"; done
这将附加到VAR3,所以您可能需要先清除VAR3。另外,您可能需要在grep上设置单词边界时更加小心,因为如果FOOSERVER已经在列表中,则不会添加FOO,但这是一个很好的技巧。
FOOSERVER
FOO
monwx1rj4#
使用printf '%s\n'可避免使用| tr ' ' '\n
printf '%s\n'
| tr ' ' '\n
printf '%s\n' "$TEST_VAR1" "$TEST_VAR2" | sort -u
4条答案
按热度按时间34gzjxbg1#
以下代码通过
sort
程序使用唯一参数-u
传输两个列表的组合:这给出了输出:
正如William Purcell在下面的注解中所指出的,这会用换行符分隔字符串,如果你想再次用空格分隔,你可以通过
tr '\n' ' '
将sort的输出传输回去:e1xvtsh32#
当然你有
这样你就完成了连接。
还具有变量:
把一个变量放在另一个变量之后是我所知道的最简单的连接方式。也许对你的计划来说还不够。但是它对简单的任务很有效。它对任何变量都很有用。
unhi4e5o3#
如果需要维护顺序,则不能使用
sort
,但可以执行以下操作:这将附加到VAR3,所以您可能需要先清除VAR3。另外,您可能需要在grep上设置单词边界时更加小心,因为如果
FOOSERVER
已经在列表中,则不会添加FOO
,但这是一个很好的技巧。monwx1rj4#
使用
printf '%s\n'
可避免使用| tr ' ' '\n