2013-02-16 1 views
1

У меня есть строка, какРазбиваем строку токенов в соответствии с правилами параметров оболочки без Eval

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

и я хочу, чтобы получить всю e f g часть. Другими словами, я хочу обозначить строку в соответствии с правилами параметров оболочки.

В настоящее время, я делаю это, как

$ 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 вы можете исследовать.