2016-10-23 6 views
0
#!/bin/bash 
user=wxlfrank 
group="wxlfrank : wxlfrank sudo" 
pattern="$user :*sudo*" 
if [[ $group != "${user} :*sudo*" ]] ; then 
    usermod -aG sudo $user 
    echo "add user $user" 'into group sudo' 
fi 

Kann mir jemand helfen erklären, warum die fünfte Zeile zuWarum entgeht Bash Expansion eine Zeichenfolge?

erweitert wird
[[ wxlfrank : wxlfrank sudo != \w\x\l\f\r\a\n\k\ \:\*\s\u\d\o\* ]] 
+0

Weil es zitiert wird? –

+0

Zitate erstellen kein String-Literal wie in den meisten Sprachen; Es ist nur eine Abkürzung, um jedes Zeichen innerhalb der Anführungszeichen einzeln zu entfernen. – chepner

Antwort

0

Sie sich von den Zitaten befreien:

if [[ $group != ${user}\ :*sudo* ]] ; then 

mit Zitaten wird das Muster als Zeichenkette behandelt.

Beachten Sie, dass, [[ ist ein bash builtin (im Gegensatz zu [ (test)), bash Griffe jede intern Expansion. Es wird also keine Worttrennung (und die Pfadnamenerweiterung außer, wenn ==/=/!= verwendet wird) an den Erweiterungen vorgenommen.