彼女をプログラムするときに使ったBashのTips
某オンラインハッカソンのプログラミング問題で,彼女を着せ替える時に使ったBashのTipsを自分用にlog.
お手軽計算
$(())で囲った式は簡単に計算できる.
echo $((100*22))
readで2変数に同時入力
スペースで2個並べればおk.
read a b;read c d; if [ $((a+b)) -gt $((c+d)) ]; then echo 1; else echo 0; fi
入力した文字列を繋げてく
連続して入力される文字列を連結する.
read n; read str; for i in `seq $((n-1))`; do read t; str=$str"-"$t; done; echo $str
標準入力から配列を作る
ちょい複雑.コマンドライン上では{}がいらないのに,.shを使うときは必要だったりよくわからなかった.
while true; do read t; arr=(${arr[@]} $t); echo ${arr[@]}; done
配列内の数値をsort
参考URLはどこかへ行ってしまった...
arr=(`for t in ${arr[@]}; do echo $t; done|sort -n`)
二次元配列を実現する方法
1次元配列を二次元配列のように扱うためには.
n*nのmatrixのy行x列目の要素は,indexが0~nの場合 matrix[y*n+x] のように表せる.Bashでは配列のindexが0と1どちらから始まるかを見極めるのが重要.以下は配列のindexが1から始まる場合の例.
read n for i in `seq $((n*n))`; do read t; matrix=(${matrix[@]} $t); done for y in `seq $n`;do for x in `seq $n`;do printf "${matrix[$(((y-1)*n+x))]} " done printf "\n" done
こんなのもあった.
シェルスクリプトで2次元配列を扱ってみた|黒ぶちメガネのblog
http://www.kurobuti.com/blog/?p=4880