2017-04-04 80 views
0

多个值,我一直想把我的shell脚本的手一个相当长的时间后,两个变量。这里有云,如果我有两个变量VAR说如下&富:比较具有shell脚本

$ echo $var 
root daemon bin sys sync games man lp mail news uucp proxy www-data backup list irc gnats nobody systemd-timesync systemd-network systemd-resolve systemd-bus-proxy syslog _apt lxd messagebus uuidd dnsmasq sshd zarvis 

$ echo $foo 
games backup nobody zarvis 

他们有一些共同的价值观,我想对它们进行比较,并找出只有唯一值。到目前为止,我从网上尝试了很多,但无法找到解决方案。请帮忙。

+0

你可以添加迄今为止你试过吗?另外,请发布您的预期输出。 –

回答

1

如果你想找出所有在$var$foo的项目,这将做到这一点:

tmp() 
{ 
    var="root daemon bin sys sync games man lp mail news uucp proxy www-data backup list irc gnats nobody systemd-timesync systemd-network systemd-resolve systemd-bus-proxy syslog _apt lxd messagebus uuidd dnsmasq sshd zarvis" 
    foo="games backup nobody zarvis" 
    varray={$var} 
    for v in ${varray[@]} 
    do 
    if ! [[ "$foo" =~ "$v" ]]; then 
     echo "No match -- $v" 
    fi 
    done 
} 

如果你想找到$foo的项目不在$var (另一种方式),只需在上面的代码中切换两个。如果你想要两个列表,请依次运行。

注意:有可能是一种方式在同一时间做两件事,但有时,在现实世界中,一个解决方案,快速和简单是最好一个是聪明的和复杂的。

希望这会有所帮助!

+0

非常感谢!有一个微小的失误,虽然 'VARRAY =($ VAR)'应该是'VARRAY = {$ VAR}' 其余一切正常。 –

+0

Whups。我很抱歉。我会在答案中解决这个问题。谢谢! –