13,230
回編集
(→配列の再生成) |
|||
| 197行目: | 197行目: | ||
hoge, , piyo, , fuga, | hoge, , piyo, , fuga, | ||
hoge, piyo, fuga, foo, bar, bazz | hoge, piyo, fuga, foo, bar, bazz | ||
</syntaxhighlight> | |||
<br><br> | |||
== 配列の要素をソートする == | |||
==== 文字列としてソートする ==== | |||
配列の全要素を出力した上で、<code>sort</code>コマンドでソートを実行して、実行結果を配列に格納する。<br> | |||
<br> | |||
まず、配列の要素に空白が含まれる場合を考慮して、IFSを改行のみに変更する。<br> | |||
これは、ソートした配列を生成する時、空白区切りで要素が設定されることを防ぐ。<br> | |||
次に、各要素を<code>echo</code>コマンドで出力することで、全要素が改行区切りで出力されるため、<code>sort</code>コマンドによるソートが可能になる。<br> | |||
<syntaxhighlight lang="sh"> | |||
#!/bin/sh | |||
IFS_BACKUP="$IFS" | |||
IFS="\n"; | |||
array=("222 222" "ccc ccc" "aaa aaa" "111 111" "bbb bbb" "333 333") | |||
array=$(for item in "${array[@]}"; do echo "$item"; done | sort) | |||
for element in "${array[@]}" | |||
do | |||
echo ${element} | |||
done | |||
IFS="$IFS_BACKUP" | |||
# 出力 | |||
111 111 | |||
222 222 | |||
333 333 | |||
aaa aaa | |||
bbb bbb | |||
ccc ccc | |||
</syntaxhighlight> | |||
<br> | |||
==== 数値としてソートする ==== | |||
要素を数値としてソートするには、<code>sort</code>コマンドに<code>-n</code>オプションを指定する。<br> | |||
<syntaxhighlight lang="sh"> | |||
#!/bin/sh | |||
IFS_BACKUP="$IFS" | |||
IFS="\n"; | |||
array=(2 3 04 000 001) | |||
array=$(for item in "${array[@]}"; do echo "$item"; done | sort -n) | |||
for element in "${array[@]}" | |||
do | |||
echo ${element} | |||
done | |||
IFS="$IFS_BACKUP" | |||
# 出力 | |||
000 | |||
001 | |||
2 | |||
3 | |||
04 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||