2

IFS の文字が 1 つだけの場合、問題なく動作します。

shell@kernel: ~> l="2.4.3"; IFS="." read -a la <<< "$l"; for ((i = 0; i < ${#la[@]}; ++i)) do echo ${la[$i]}; done;
2
4
3

IFS には 2 文字ありますが、余分なスペース要素が生成されます

shell@kernel: ~> l="2->4->3"; IFS="->" read -a la <<< "$l"; for ((i = 0; i < ${#la[@]}; ++i)) do echo ${la[$i]}; done;
2

4

3
shell@kernel: ~> l="2..4..3"; IFS=".." read -a la <<< "$l"; for ((i = 0; i < ${#la[@]}; ++i)) do echo ${la[$i]}; done;
2

4

3

配列内の余分なスペース要素を取り除くにはどうすればよいですか?

4

3 に答える 3

1

コメントから続けて、配列に値を格納する前に空の要素をテストするか、空の値を処理することができますecho。率直に言って、後者を行う方が簡単です。

l="2->4->3"; IFS="->" read -a la <<< "$l"; \
for ((i = 0; i < ${#la[@]}; ++i)) do \
[ -n "${la[i]}" ] && echo ${la[$i]}; done

出力

2
4
3
于 2016-10-13T04:25:53.670 に答える
1

次を使用して、区切り記号->を単一の文字に変換できます。

l="2->4->3"

IFS="-" read -a la <<< "${l//->/-}"

printf '%s' "${la[@]}"

文字列に追加の文字が含まれる可能性がある場合は、文字列に含まれる-可能性が低い文字を使用します。

IFS="┵" read -a la <<< "${l//->/┵}"
于 2016-10-13T06:17:59.120 に答える