首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  程序员

shell 关于字符串切割成数组的问题

  •  
  •   dengtongcai · 341 天前 · 1182 次点击
    这是一个创建于 341 天前的主题,其中的信息可能已经有所发展或是发生改变。

    shell 代码如下

    #!/bin/bash
    while read line
    do
        string=$line
        str=${string//|/ }
        echo str 长度: ${#str[@]}
    	for each in ${str[*]}
        do
        	echo $each
        done
        echo ------赋值给 arr-----
        arr=($str)
        echo arr 长度:${#arr[@]}
        for each in ${arr[*]}
        do
        	echo $each
        done
    done
    

    执行

    sh split.sh <<< '1|2|3|4|5|6|7'
    

    结果

    str 长度: 1
    1
    2
    3
    4
    5
    6
    7
    ------赋值给 arr-----
    arr 长度:7
    1
    2
    3
    4
    5
    6
    7
    

    shell 写的不多,很奇怪为啥 str 长度是 1 呢?明明有 7 个元素啊😵

    5 回复  |  直到 2019-01-06 20:02:45 +08:00
        1
    dengtongcai   341 天前
    是不是 arr=($str)把类型改了?我看网上很多代码都没这句,取长度时候不对。
        2
    aijam   341 天前
    > str="abc"; echo ${#str[@]}
    1
    > str="abc"; echo ${#str}
    3
        3
    dengtongcai   341 天前 via iPhone
    @aijam 我脚本里的 str arr 内容应该是一样的吧?
        4
    aijam   341 天前   ♥ 1
    str 是"1 2 3",字符串
    arr 是(1 2 3),数组
    再举个例子:
    > str="1 2 3"; arr=(0 $str 4)
    > echo ${arr[*]}
    0 1 2 3 4
        5
    dengtongcai   341 天前 via iPhone
    @aijam 明白了😢,谢谢。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2413 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 14:17 · PVG 22:17 · LAX 06:17 · JFK 09:17
    ♥ Do have faith in what you're doing.