理解はできるけどそれだけだな 「ピザ屋の匂いって、全部他人が注文したものから香る匂いだと思うと、悔しいよな」と友人に言ったら「理解はできるけどそれだけだな」と言われた。全く持ってその通りだ。この言葉を発する時、自分は日本語のテクニックだけで言葉を作っていて、伝えたい想いとかそう…
![はてなブログ | 無料ブログを作成しよう](https://cdn-ak-scissors.b.st-hatena.com/image/square/06a15c64ba0ceec233d86d71001ebb29a9dcbf5d/height=288;version=1;width=512/https%3A%2F%2Fcdn.blog.st-hatena.com%2Fimages%2Ftheme%2Fog-image-1500.png)
bashであれば#1の方が書かれたように配列が使えますが、純粋なBシェルでは配列は使えません。 exec 3<&0 < TBL.txt count=0 while read line do eval ex$count=\$line count=`expr $count + 1` done exec 0<&3 3<&- echo $ex1 のようにします。 最後のechoのところで、添字が変数のときは、 eval echo \$ex$count のようにします。 何故上手く行かないのかは、シェルが変数置換したり、* を展開したり、' や " や \ 等の特殊文字を処理したり、組み込みコマンドの判断をしたりには一定の順序があるということです。 ex$count=$line はイコールの左辺がシェル変数の形式をしていない($がある)ため、シェル変数への代入と見なされません。この判断は $ による
作成したシェルスクリプトが原始的すぎて更新が面倒・・・ ということで、やっぱり少し改良を試みる。 基本的に、cc でコンパイルすると -o オプションをつけない限りは すべて同じ名前のバイナリファイルにコンパイルされてしまう。 そのため、ソースごとにバイナリファイル名を決めることができる必要がある。 シェルでやっているから、ファイル名として使う情報はsedコマンドで編集したりすれば かなり細かい名前が決められそうだが、とりあえずは連番で名前を振る。 と、簡単にできそうに思ったのだが、シェルプログラミングなんで数年ぶりですっかり忘れた。 文字列の連結方法すら忘れている始末。誠に恥ずかしい・・・ 忘れないようにメモっておかなければ! valueA="valueA" valueB="valueB" これらをつなげたいとすると、 value=$valueA$valueB という感じで指定する。そう
前回 bash 4.0をインストールしましたので、早速試してみます。 まずは、配列についてです。 もともと、シェルは変数の型を意識しなくて良かったので、変数の宣言は意識されていません。しかし、bash では、declare 組み込みコマンドが用意されていますので、積極的に使いたいと思います。以下で配列変数を Array とします。 ◎配列の添え字 は、 0から始まる整数 (zero-based indexing) ◎配列の宣言 は、 declare -a Array ◎配列への値の代入 は、 Array[2]='value' (3番目の要素への代入) Array=(a b c d) (一度に代入:複合代入) Array=([1]=a [0]=b [2]=c d) (複合代入は添え字もOK、 d は直前の添え字+1) ◎配列の参照 は、 ${Array[2]} (3番目の要素) ${Arra
シェルで文字(変数)連結する方法について教えて下さい。 以下のようにファイル(CSV形式)から各列(今回はA~D列)の値を読み込んで変数に代入し※で連結させます。 そして★で別の変数に代入します。これを2行目3行目 シェルで文字(変数)連結する方法について教えて下さい。 以下のようにファイル(CSV形式)から各列(今回はA~D列)の値を読み込んで変数に代入し※で連結させます。 そして★で別の変数に代入します。これを2行目3行目 ・・・と繰り返して いきたいのですが、 $JOUKEN2には最終行の値しか入っていません。 文字列を追加するというよりは上書きされてしまいます。 上書きされないように追加するにはどうすればよいでしょうか。 そもそもJavaのように 変数 = 変数 + 追加する変数 というやり方はできないのかなと思ったりしてます。 (以下shell文のファイル読込~文字連結箇所抜粋)
シェルスクリプトのwhileとforは同じループ処理だけど、使い方や性格が異なる。 その違いの中でも今回は僕がよくやってしまうミスをメモする。 例えばファイルを一行ずつ処理してまわしたい場合の記述例。 while では以下のように書く。
Guides, HowTos and Tips for Technology Geeks - The Geek Stuff 高機能シェルのひとつにbashがある。shの機能を拡張したsh系に分類されるシェルで、インタラクティブシェルとしてもシェルスクリプトとしても利用される。Linux系のディストリビューションではデフォルトでインストールされ、デフォルトのシェルに設定されていることが多い。その場合、システムの/bin/shの実態がbashになっていることもあり、/bin/shスクリプトを書いているつもりでいつの間にかbashの拡張機能を使っていることもある。 The Ultimate Bash Array Tutorial with 15 Examples - The Geek Stuffにおいてbash拡張機能のひとつである配列の機能が紹介されている。15のサンプルにわけて機能を紹介する
前回( Bash で 配列を使ってみる その 1 )は値の格納でしたが 今回は配列らしく for ループを使って値を出力します。 まずは 普通の? for 文です。 配列の値を全て出力するには次のように 添え字に "@" か "*" を使います。 $ ARRAY=(one two three four) $ echo ${ARRAY[@]} one two three four $ echo ${ARRAY[*]} one two three four これを for 文で使用します。 $ ARRAY=(one two three four) $ for item in ${ARRAY[@]} > do > echo $item > done one two three four ただし、これは 1 つ問題があります。 Bash の for 文 その 2 で書きましたが for 文は IF
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く