Splitting a string to tokens according to shell parameter rules without eval
问题 I have a string like $ str="abc 'e f g' hij" and i wish to get whole e f g part of it. In other words, i wish to tokenize the string according to shell parameter rules. Currently, i am doing that as $ str="abc 'e f g' hij"; (eval "set -- $str"; echo $2) but this is totally unsafe if a single * gets outside of ' -ticks. Any better solutions? 回答1: You can use set -f to disable filename expansion altogether. $ str="* 'e f g' hij" $ ( set -f; eval "set -- $str"; echo $2 ) e f g This addresses