Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将字符串拆分为数组shell脚本_Arrays_Shell - Fatal编程技术网

Arrays 将字符串拆分为数组shell脚本

Arrays 将字符串拆分为数组shell脚本,arrays,shell,Arrays,Shell,如何在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=: re

如何在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"
str=a:b:c:d:e

IFS=:read-ra ari找到了一个不需要更改IFS或循环的解决方案:

str=a:b:c:d:e
arr=(`echo $str | cut -d ":"  --output-delimiter=" " -f 1-`)
输出:

echo ${arr[@]}
a b c d e
输出:

echo ${arr[@]}
a b c d e

把上面的答案组合成对我有用的东西

set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "$@"; do echo $i; done
给予


它不起作用。错误消息说expected“(在ary=($str)所在的行中)。这是专门的bash语法。您使用的shell是什么?如果您的脚本具有
#!/bin/sh
更改为
#!/bin/bash
如何调用脚本?我不明白(我是如何运行此脚本的?)@SJunejo,/bin/sh中唯一类似数组的数据结构是位置参数:
set--$str;for“$@”中的元素太长了,读不下去了。如果你真的需要一个数组,你需要选择一个不同的工具来做这个工作。使用$tring来测试字符串是一个很好的触碰,但是:方法太复杂了,这又与“G?”GrayBeuld TL不同,它不:-我发现zzk的答案对我来说不太合适,所以通过
集对其进行调整--
,然后与给出的多个答案中的有用内容进行核对。这是出于我自己的目的,但如果其他人有相同的问题,我也会进行共享。我需要对路径中列出的所有文件夹运行多个测试—主要用于审核权限提升问题。
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
#