2013-02-16 72 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其他选项,你可以探索。