bash を使っているといろいろコマンドを打ちすぎて、history の履歴自体が鬱陶しくなってきます。そんな時は、history -c で履歴を消去してしまうとすっきりします。
2008年6月24日火曜日
シェルで配列を使う No.003
シェルで配列を使う際、要素でソートする場合、以下のようにするのですが、
HOGE2=(`echo ${HOGE[*]} | sed 's/\s/\n/g' | sort`)これだと、確かにソートされるのですが、数字としては、うまく処理されません。そこで、以下の通り、一旦、ゼロ付数字に変換してやることで、正常にソートされます。
- 正常にソートされない
要素が 1 5 11 2 3 21 31 22 だとすると、以下のようになってしまいます。1 11 2 21 22 3 31 5
- ゼロ付数字に変換してソートする
要素を 01 05 11 02 03 21 31 22 に変換してソートします。# ゼロ付でソート
HOGE2=(`printf "%02.0f\n" ${HOGE[*]} | sort | sed 's/\n/ /g' | sed 's/\s+$//g'`)# ゼロを取り除く
HOGE3=(`printf "%.0f " ${HOGE2[*]}`)1 2 3 5 11 21 22 31
2008年6月17日火曜日
シェルで配列を使う No.002
なんでもかんでもシェルでやってしまおうとすると、配列を扱うことが多くなり、配列による複雑な処理が増えてきます。
配列全体を表示する時は、echo ${HOGE[*]} としたりするのですが、そうすると配列の要素がブランク区切りで表示されます。
echo ${HOGE[*]}いろんな処理をしていると、重複した要素をまとめたいことがあります。また、要素をソートしたい場合もあります。以下、それらの方法です。
a b c d e f g h i j k 1 1 1 1 2 2 2 a b c x y z
- 重複した要素をまとめる
sort と uniq を使いたいので、配列の要素列をスペースを改行に変換します。HOGE2=(`echo ${HOGE[*]} | sed 's/\s/\n/g' | sort | uniq`)
- 要素をソートする
1.の例とほとんど同じで、uniqが無いだけです。HOGE2=(`echo ${HOGE[*]} | sed 's/\s/\n/g' | sort`)
2008年6月14日土曜日
シェルで配列を使う No.001
シェルスクリプトでも、一般的なプログラミング言語と同様に配列変数を使えます。
使い方は簡単で、値を複数代入することで、配列変数となります。ただし、この簡単さ故に、規則的にコーディングしないと、配列なのかどうかわからなくなってしまったりします。
- 初期化
必須というわけではないですが、一応行っておいたほうが無難でしょう。HOGE=()
- 初期化(代入)
()で初期化すると値は何も入っていない状態ですが、値を代入しながら初期化することも可能です。(括弧で括って、スペースで区切ります。)HOGE=(a 1 bcd 123)
- 参照(1)
代入してある値を参照する方法です。
一つ一つ値を参照echo ${HOGE[0]} ${HOGE[1]} ${HOGE[2]}
まとめて参照
a 1 bcdecho ${HOGE[*]}
a 1 bcd 123 - 参照(2)
ちょっと変わった参照方法です。
文字数を参照 (変数名の先頭に#をつけて、要素を指定します。)echo ${#HOGE[2]}
要素数を参照 (変数名の先頭に#をつけて、全要素‘*’を指定します。)
3echo ${#HOGE[*]}
4
入門UNIXシェルプログラミング シェルの基礎から学ぶUNIXの世界
図解でわかるLinuxシェルスクリプト・正規表現
登録:
コメント (Atom)
