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

2019-01-06 13:36:31 +08:00
 dengtongcai

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 个元素啊😵

2188 次点击
所在节点    程序员
5 条回复
dengtongcai
2019-01-06 13:49:42 +08:00
是不是 arr=($str)把类型改了?我看网上很多代码都没这句,取长度时候不对。
aijam
2019-01-06 15:47:28 +08:00
> str="abc"; echo ${#str[@]}
1
> str="abc"; echo ${#str}
3
dengtongcai
2019-01-06 16:17:55 +08:00
@aijam 我脚本里的 str arr 内容应该是一样的吧?
aijam
2019-01-06 16:32:58 +08:00
str 是"1 2 3",字符串
arr 是(1 2 3),数组
再举个例子:
> str="1 2 3"; arr=(0 $str 4)
> echo ${arr[*]}
0 1 2 3 4
dengtongcai
2019-01-06 20:02:45 +08:00
@aijam 明白了😢,谢谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/524348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX