2

私は次のような文字列を持っています

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

そして、私e f gはそれの全体を取得したいと考えています。つまり、シェル パラメーターの規則に従って文字列をトークン化したいと考えています。

現在、私はそれをやっています

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

しかし、シングルが-ticks*の外に出ると、これは完全に安全ではありません。'

より良い解決策はありますか?

4

1 に答える 1

2

set -fファイル名の展開を完全に無効にするために使用できます。

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

これは、 で予想される 1 つの問題のみに対処しますが、探索eval可能な他のオプションが利用できる場合があります。set

于 2013-02-16T19:20:26.657 に答える