使用 filepath.Glob 的 Golang 怪异行为
Golang weird behavior using filepath.Glob
我对 Golang 上的 glob 使用感到困惑,我可能缺少一些环境变量。不知道我做的对不对。
当 运行 在我的 IDE (Intellij IDEA) 上时,这段代码工作得很好,但是当这是 运行 在 OS 上时通过go run
没用。我不知道有什么区别。
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)
}
运行 在 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
运行 IntelliJ IDEA
此处的区别在于 shell 正在执行 glob 并为您的应用程序提供单独的值。当从 shell 执行时,你应该用双引号括起一个 glob,以确保它不会首先被你的 shell 评估。请参阅下面的示例。
Seans-MBP-2:~ sthorne$ echo Testing*
Testing Testing2 Testing3
Seans-MBP-2:~ sthorne$ echo "Testing*"
Testing*
我对 Golang 上的 glob 使用感到困惑,我可能缺少一些环境变量。不知道我做的对不对。
当 运行 在我的 IDE (Intellij IDEA) 上时,这段代码工作得很好,但是当这是 运行 在 OS 上时通过go run
没用。我不知道有什么区别。
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)
}
运行 在 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
运行 IntelliJ IDEA
此处的区别在于 shell 正在执行 glob 并为您的应用程序提供单独的值。当从 shell 执行时,你应该用双引号括起一个 glob,以确保它不会首先被你的 shell 评估。请参阅下面的示例。
Seans-MBP-2:~ sthorne$ echo Testing*
Testing Testing2 Testing3
Seans-MBP-2:~ sthorne$ echo "Testing*"
Testing*