如何在shell脚本中将字符串拆分为数组?
我尝试使用 IFS='delimiter'
并在循环结构 (for, while) 中操作,虽然成功了,但我需要从该字符串创建一个数组。
请问如何将字符串转换成数组?
谢谢!
str=a:b:c:d:e
set -f
IFS=:
ary=($str)
for key in "${!ary[@]}"; do echo "$key ${ary[$key]}"; done
输出
0 a
1 b
2 c
3 d
4 e
另一种(bash)技术:
str=a:b:c:d:e
IFS=: read -ra ary <<<"$str"
这将仅在 read 命令运行期间限制对 IFS 变量的更改。
#!/bin/bash
str=a:b:c:d:e
arr=(${str//:/ })
输出:
echo ${arr[@]}
a b c d e
我找到了一种解决方案,不需要更改IFS或循环:
str=a:b:c:d:e
arr=(`echo $str | cut -d ":" --output-delimiter=" " -f 1-`)
输出:
echo ${arr[@]}
a b c d e
set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "$@"; do echo $i; done
提供
# set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "$@"; do echo $i; done
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
#
set--
进行了调整,并从多个答案中整理出有用的内容。这是为了我的自身目的,但如果其他人遇到同样的问题,也可以分享回去。 - Richard Braganza
#!/bin/sh
,请改为#!/bin/bash
。 - glenn jackmanset -- $str; for element in "$@"; do echo $element; done
。如果你确实需要一个数组,那么你需要选择一个不同的工具来完成任务。 - glenn jackmansh
。如果你已经阅读了其他评论,应该已经意识到这一点了。 - glenn jackman