21

シェルスクリプトで文字列を配列に分割するにはどうすればよいですか?

試してみましたがIFS='delimiter'、ループで動作します(for, while)が、その文字列の配列が必要です。

文字列から配列を作成するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

32
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"

これにより、読み取りコマンドの期間中のみ、IFS変数への変更が制限されます。

于 2012-04-12T19:26:14.013 に答える
23
#!/bin/bash

str=a:b:c:d:e
arr=(${str//:/ })

出力:

echo ${arr[@]}
a b c d e
于 2014-04-18T15:05:43.317 に答える
7

IFSまたはループを変更する必要のないソリューションを見つけました。

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

出力:

echo ${arr[@]}
a b c d e
于 2012-12-09T02:58:10.080 に答える
1

上記の答えを私のために働いたものに組み合わせる

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
# 
于 2017-07-09T14:52:09.540 に答える