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

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

  •  
  •   dengtongcai · Jan 6, 2019 · 2818 views
    This topic created in 2689 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
        1
    dengtongcai  
    OP
       Jan 6, 2019
    是不是 arr=($str)把类型改了?我看网上很多代码都没这句,取长度时候不对。
    aijam
        2
    aijam  
       Jan 6, 2019
    > str="abc"; echo ${#str[@]}
    1
    > str="abc"; echo ${#str}
    3
    dengtongcai
        3
    dengtongcai  
    OP
       Jan 6, 2019 via iPhone
    @aijam 我脚本里的 str arr 内容应该是一样的吧?
    aijam
        4
    aijam  
       Jan 6, 2019   ❤️ 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
       Jan 6, 2019 via iPhone
    @aijam 明白了😢,谢谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   932 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 21:00 · PVG 05:00 · LAX 14:00 · JFK 17:00
    ♥ Do have faith in what you're doing.