Sarcasistブログ

Sarcasistのメンバーが技術ネタ、運営ネタ、サービスに関するを記事を投稿するブログ

shで配列を使いたいときどうしますか?

ご挨拶

こんにちは、こんばんは、sarcasistではサーバーの管理と団長をしています、arumuko (@arumuko)と申します。

本題

前振り

みなさんシェルスクリプトで配列を使いたいときはどうしていますか?

こういう感じですかね?

  • hairetsu.sh
#/usr/bin/sh
ARRAY=(a b c d)
echo ${ARRAY[*]}
echo ${ARRAY[1]}
echo ${#ARRAY[*]}

・実行

$ sh hairetsu.sh 
a b c d
b
4

こんな感じで表示されますね。

ちょっと待った!

それ本当にsh ですか

sh hairetsu.sh 
hairetsu.sh: 2: hairetsu.sh: Syntax error: "(" unexpected

こうなってませんか?
そのshbashじゃありませんか?

shでは配列が使えないはずではないでしょうか? (すいません。ソースは探せていません。)

ってことで、shで配列を扱ってみました。

やってみる

こんな感じになりました。

  • hairetsu2.sh
#!/bin/sh
ARRAY='a b c d'
echo $ARRAY
echo $(echo $ARRAY | cut -d ' ' -f 2)
echo $(echo $ARRAY | tr ' ' '\n' | wc -l)

・実行

$ sh hairetsu2.sh 
a b c d
b
4

こんな感じで表示されますね。

要素で繰り返ししたいときはこんな感じ

  • loop.sh
#!/bin/sh
ARRAY='a b c d'
LENGTH=`echo $ARRAY | tr ' ' '\n' | wc -l`
for i in `seq $LENGTH`
do
  ELEMENT=`echo $ARRAY | cut -d ' ' -f $i`
  echo "$ELEMENT is hoge?"
done

・実行

$ sh loop.sh
a is hoge?
b is hoge?
c is hoge?
d is hoge?

まとめ

これで配列を使わずにループを扱えそうです。
sarcasistの活動の中でもシェルを扱うことがよくありますので、シェルに興味がある方はsarcasistのブログの定期的なチェックをよろしくお願いします。