2013-02-16 32 views
1

令牌我有一個像將字符串分割根據shell參數規則,而不EVAL

$ str="abc 'e f g' hij" 

一個字符串,我希望得到的是整個e f g一部分。換句話說,我希望根據shell參數規則標記字符串。

目前,我在做什麼,作爲

$ str="abc 'e f g' hij"; (eval "set -- $str"; echo $2) 

,但是這完全是不安全的,如果一個*得到的' -ticks之外。

任何更好的解決方案?

回答

2

您可以使用set -f來完全禁用文件名擴展。

$ str="* 'e f g' hij" 
$ (set -f; eval "set -- $str"; echo $2) 
e f g 

這解決了這樣一個問題,你可能會eval預料,但有可能是可用set其他選項,你可以探索。