• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dengtongcai
V2EX  ›  程序员

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

  •  
  •   dengtongcai · Jan 6, 2019 · 3176 views
    This topic created in 2858 days ago, the information mentioned may be changed or developed.

    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 replies  •  2019-01-06 20:02:45 +08:00
    dengtongcai
    dengtongcai
    OP
    Jan 6, 2019
    1
    是不是 arr=($str)把类型改了?我看网上很多代码都没这句,取长度时候不对。
    aijam
    aijam
    Jan 6, 2019
    2
    > str="abc"; echo ${#str[@]}
    1
    > str="abc"; echo ${#str}
    3
    dengtongcai
    dengtongcai
    OP
    Jan 6, 2019 via iPhone
    3
    @aijam 我脚本里的 str arr 内容应该是一样的吧?
    aijam
    aijam
    Jan 6, 2019❤️1
    4
    str 是"1 2 3",字符串
    arr 是(1 2 3),数组
    再举个例子:
    > str="1 2 3"; arr=(0 $str 4)
    > echo ${arr[*]}
    0 1 2 3 4
    dengtongcai
    dengtongcai
    OP
    Jan 6, 2019 via iPhone
    5
    @aijam 明白了😢,谢谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3007 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
    ♥ Do have faith in what you're doing.