我有一個字符串變量:如何獲得os.Args般的記號在命令行字符串
commandLineString := `echo -n "a b c d"`
我想將它隱蔽於:
args := []string{"echo", "-n", "\"a b c d\""}
我該怎麼辦它?
我有一個字符串變量:如何獲得os.Args般的記號在命令行字符串
commandLineString := `echo -n "a b c d"`
我想將它隱蔽於:
args := []string{"echo", "-n", "\"a b c d\""}
我該怎麼辦它?
如果字符串修復了3個參數,您可以通過strings.SplitN
來完成。這裏是關於golang字符串庫的完整文檔。 https://golang.org/pkg/strings/#SplitN
CMIIW ^^
這可以在一個非常緊湊的方式使用regular expression表示。
輸入(命令)是一系列的標記:
和:
從上市標準的正則表達式:
("[^"]*"|[^"\s]+)(\s+|$)
Criteria: __2____ __1___ __3__
使用Go的regexp
包的解決方案是很短:
s := `echo -n "a b c d"`
pattern := `("[^"]*"|[^"\s]+)(\s+|$)`
r := regexp.MustCompile(pattern)
fmt.Printf("%q\n", r.FindAllStringSubmatch(s, -1))
fmt.Printf("%q\n", r.FindAllString(s, -1))
輸出(嘗試在Go Playground):
[["echo " "echo" " "] ["-n " "-n" " "] ["\"a b c d\"" "\"a b c d\"" ""]]
["echo " "-n " "\"a b c d\""]
備註是的regexp.FindAllString()
結果還包含標記之間的定界符(空格),所以你可以調用strings.TrimSpace()
他們刪除這些:
ss := r.FindAllString(s, -1)
out1 := make([]string, len(ss))
for i, v := range ss {
out1[i] = strings.TrimSpace(v)
}
fmt.Printf("%q\n", out1)
這給所需的輸出:
["echo" "-n" "\"a b c d\""]
或者,你可以使用的regexp.FindAllStringSubmatch()
結果:它返回切片的切片,使用第二元件(位於索引1
)從每個元素:
sss := r.FindAllStringSubmatch(s, -1)
out2 := make([]string, len(sss))
for i, v := range sss {
out2[i] = v[1]
}
fmt.Printf("%q\n", out2)
這也給了所需的輸出:
["echo" "-n" "\"a b c d\""]
嘗試這些在Go Playground)。
https://www.google.co.id/#q=golang+split+string+by+space+keep+quoted+string – har07
具體而言,[此主題](https://groups.google.com /論壇/#!主題/ golang-nuts/pNwqLyfl2co),它使用庫[go-shellwords](https://github.com/mattn/go-shellwords)提出了幾種方法之一。 – har07
@ har07它適用於我所需要的,謝謝你許多! –