代码之家  ›  专栏  ›  技术社区  ›  Olivier Verdier

使用zsh拆分字符串,如在python中一样

  •  25
  • Olivier Verdier  · 技术社区  · 14 年前

    在蟒蛇中:

    s = '1::3'
    a = s.split(':')
    print a[0] # '1' good
    print a[1] # '' good
    print a[2] # '3' good
    

    我怎样才能达到同样的效果 zsh ?

    以下尝试失败:

    string="1::3"
    a=(${(s/:/)string})
    echo $a[1] # 1
    echo $a[2] # 3 ?? I want an empty string, as in Python
    
    2 回复  |  直到 14 年前
        1
  •  47
  •   paulmelnikow    7 年前

    解决方案是使用 @ 修改器,如中所示 the zsh docs :

    string="1::3"
    a=("${(@s/:/)string}") # @ modifier
    

    顺便说一下,如果你选择了定界符,那么使用换行符作为定界符就更容易,也不容易出错。使用zsh拆分线条的正确方法是:

    a=("${(f)string}")
    

    我不知道这里的报价是否也是必要的…

        2
  •  7
  •   Dennis Williamson    10 年前

    这将在两个zsh中都有效(与 setopt shwordsplit zsh -y )和bash(基于零的数组):

    s="1::3"
    saveIFS="$IFS"
    IFS=':'
    a=(${s})
    IFS="$saveIFS"