将字符串拆分为数组Shellscript

Gáb*_*rga 19 arrays shell

如何在shell脚本中将字符串拆分为数组?

我尝试过IFS='delimiter',它适用于循环,(for, while)但我需要一个来自该字符串的数组.

如何从字符串中创建数组?

谢谢!

gle*_*man 24

str=a:b:c:d:e
set -f
IFS=:
ary=($str)
for key in "${!ary[@]}"; do echo "$key ${ary[$key]}"; done
Run Code Online (Sandbox Code Playgroud)

输出

0 a
1 b
2 c
3 d
4 e
Run Code Online (Sandbox Code Playgroud)

另一种(bash)技术:

str=a:b:c:d:e
IFS=: read -ra ary <<<"$str"
Run Code Online (Sandbox Code Playgroud)

这仅限于读命令持续时间内对IFS变量的更改.

  • 这不起作用。错误消息显示 ary=($str) 所在行中出现预期的“(”。 (2认同)

小智 20

#!/bin/bash

str=a:b:c:d:e
arr=(${str//:/ })
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

echo ${arr[@]}
a b c d e
Run Code Online (Sandbox Code Playgroud)


zzk*_*zzk 7

找到一个不需要更改IFS或循环的解决方案:

str=a:b:c:d:e
arr=(`echo $str | cut -d ":"  --output-delimiter=" " -f 1-`)
Run Code Online (Sandbox Code Playgroud)

输出:

echo ${arr[@]}
a b c d e
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用...尝试执行回显$ {arr [1]} (2认同)