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

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

  •  
  •   dengtongcai · 2019-01-06 13:36:31 +08:00 · 2149 次点击
    这是一个创建于 1908 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    dengtongcai
        1
    dengtongcai  
    OP
       2019-01-06 13:49:42 +08:00
    是不是 arr=($str)把类型改了?我看网上很多代码都没这句,取长度时候不对。
    aijam
        2
    aijam  
       2019-01-06 15:47:28 +08:00
    > str="abc"; echo ${#str[@]}
    1
    > str="abc"; echo ${#str}
    3
    dengtongcai
        3
    dengtongcai  
    OP
       2019-01-06 16:17:55 +08:00 via iPhone
    @aijam 我脚本里的 str arr 内容应该是一样的吧?
    aijam
        4
    aijam  
       2019-01-06 16:32:58 +08:00   ❤️ 1
    str 是"1 2 3",字符串
    arr 是(1 2 3),数组
    再举个例子:
    > str="1 2 3"; arr=(0 $str 4)
    > echo ${arr[*]}
    0 1 2 3 4
    dengtongcai
        5
    dengtongcai  
    OP
       2019-01-06 20:02:45 +08:00 via iPhone
    @aijam 明白了😢,谢谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1313 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:31 · PVG 07:31 · LAX 16:31 · JFK 19:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.