【问题标题】:Splitting a string to tokens according to shell parameter rules without eval根据shell参数规则将字符串拆分为令牌而不使用eval
【发布时间】:2013-02-16 18:32:26
【问题描述】:

我有一个类似的字符串

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

我希望得到整个e f g 的一部分。换句话说,我希望根据 shell 参数规则对字符串进行标记。

目前,我正在这样做

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

但是如果单个* 超出'-ticks,这是完全不安全的。

有更好的解决方案吗?

【问题讨论】:

    标签: bash shell sh


    【解决方案1】:

    您可以使用set -f 完全禁用文件名扩展。

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

    这仅解决了 eval 可能会出现的一个问题,但您可以探索 set 的其他选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 2015-05-23
      • 2018-11-20
      • 2020-09-09
      • 2017-12-10
      • 2015-10-09
      相关资源
      最近更新 更多