2016-05-27 19 views
1

Ich bin verwirrt über Glob-Nutzung auf Golang, ich vermisse wahrscheinlich einige Umgebungsvariable. Ich weiß nicht, ob ich es richtig mache.Golang seltsames Verhalten mit Dateipfad.Glob

Dieser Code funktioniert einwandfrei, wenn er auf meiner IDE (Intellij IDEA) ausgeführt wird, aber wenn dies auf dem Betriebssystem über go run ausgeführt wird, funktioniert es nicht. Ich kann nicht herausfinden, was der Unterschied ist.

package main 

import (
    "path/filepath" 
    "fmt" 
    "os" 
) 

func main() { 

    file := os.Args[1] 

    matches, err := filepath.Glob(file) 

    if err != nil { 
     fmt.Println(err) 
     os.Exit(1) 
    } 
    fmt.Println(fmt.Sprintf("Number of matches:%d", len(matches))) 
    fmt.Println(matches) 
} 

Laufen auf OS

go run globtest.go /Users/bernardovale/glotest/*.bkp 
Number of matches:1 
[/Users/bernardovale/glotest/test1.bkp] 

ls -l /Users/bernardovale/glotest/*.bkp 
-rw-r--r-- 1 bernardovale staff 0 May 27 12:06 /Users/bernardovale/glotest/test1.bkp 
-rw-r--r-- 1 bernardovale staff 0 May 27 12:06 /Users/bernardovale/glotest/test2.bkp 
-rw-r--r-- 1 bernardovale staff 0 May 27 12:06 /Users/bernardovale/glotest/test3.bkp 

Laufen auf IntelliJ IDEA

go run on the IDEA

+1

Sie lassen die Shell den Glob für Sie tun. Drucken Sie die Argumente aus Ihrem Programm und sehen Sie, was Sie bekommen. – JimB

+0

du hast Recht, ich wusste das nicht. Danke vielmals. Posten Sie es als Antwort, wenn Sie mögen. –

Antwort

3

Der Unterschied hier ist, dass die Shell die glob ausführt und die einzelnen Werte für Ihre Anwendung bereitstellt. Wenn Sie eine Shell ausführen, sollten Sie einen Glob in doppelte Anführungszeichen setzen, um sicherzustellen, dass er nicht zuerst von Ihrer Shell ausgewertet wird. Siehe das Beispiel unten.

Seans-MBP-2:~ sthorne$ echo Testing* 
Testing Testing2 Testing3 
Seans-MBP-2:~ sthorne$ echo "Testing*" 
Testing*