Reputation: 1591
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?
Upvotes: 2
Views: 223
Reputation: 531708
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 just one problem you might anticipate with eval
, but there may be other options available with set
you can explore.
Upvotes: 2