読者です 読者をやめる 読者になる 読者になる

applescript と違って shellscript はやっぱ偉い

tech shellscript applescript

荒らすだけ荒らし全てをサラっていった,くっそたれ applescript に対し,shellscript はとても行儀がいい.

いずれも,納得のいかないまま悶々としていたトピックだっただけに,ハッキリできて嬉しかったりする.
そのメモ.

``` よか $() がいいらしい

確かに,そう思いました.
これを知った時はときめいた.

"コマンド置換" と言うらしいですね.

コマンドの実行結果を使いたい場合は,バッククォートで囲むというのは知っていたのですが,確かに「なんだかなぁ...」と思っていたんです.

というのも実際に出くわしたのが,こういうケース.例です.;

a=`basename ${path} .mp3`
b=`mdfind -onlyin ${anotherdir} ${a}`

本当は,こう書けるといいな,とイメージしてまして,一旦,そう書きましたし(笑;

b=`mdfind -onlyin ${anotherdir} `basename ${path} .mp3``

勿論エラー.
ということで仕方なく,上述のように 2 行に分けて記載してました.

そんな中,先日,またですw applescript でつのった苛立ちから一度熱を解放しようと,前々から気になってはいたトピックを引っ張り出し,その解決に腰を添えてみようと思い立ちます.

そのひとつが,このコマンド置換.

ウロウロしていると,いました.;

バッククオートだと一時変数に代入しないとできませんが、"$()"を使うとネストが可能なので、一発で取得する事ができます。

そうだそうだ.

でも本当に "$()" を使っていいのかが気になる.
これ使いたい分,その信頼性が気になる.
なぜならば,今まで見てきたコード,どれもバッククォートだったから.

そしたらそしたら.;

kshやbashの場合、「$(コマンド)」($+単一の丸括弧)はバッククォート指定「コマンド」と同じ。 $()が使えるシェルなら、バッククォートよりも$()を使うべき。(バッククォートは古い形式であり、ネストできないし、開始と終了もまぎらわしい)

いいぞ.

そしてそして.
これも "$()" をとりあげてらっしゃるエントリーで,そのコメントに...

$( ... ) によるコマンド置換は、「bashの~」というよりは「POSIXシェルの」機能なので ( http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_03 ) 積極的に使ってもあまり問題ないと思います。bash に限らず、新しい Bourne shell 系シェルであれば使えます。

びんごぅ.はい,決まり.もー決めたっ.``` 表記はつかいまてん.
コマンド置換は,これから全部,ぜったい "$()" を使う事にします.

いや,これまでのコマンド置換の部分,全部書き換えたいくらいっ.

ということで,こうなるんですね! ;

a=$(mdfind -onlyin ${anotherdir} $(basename ${path} .mp3))

うーん,すっきりぃ!

変数は $variable と ${variable} あるけど,全部 ${variable} で良くない?

これも個人的に気持ち悪かったところ.

両者の意味の違いは認識してます.

色んな人のコード眺める時には,そこら辺の正解を知りたくて気にして見ているのです.
が,同じソースですら何かそこら辺の摘み分けが,どうも読み切れない.もっと言うと曖昧,更に言うと,もしかしていい加減? な気までもがしてならない....と感じる.

で,そろそろこの辺り目を凝らすのに疲れてきて,更に良くない事にいよいよマガいなりにも慣れてくると,自身からしていい加減になってきて...

そこで思ったのが,
結局,全部 ${variable} でダメなんだろうか.

そう割り切っても良い根拠を探す(笑

と...;

上記の「echo」コマンドの部分のように、どこまでが文字列でどこからが変数なのか誤解釈されそうな場合には、変数名を「{ }」で囲む必要があります。変数名は常に「{ }」で囲むようにすることをお勧めします。

いつも参考にさせて頂いてるサイトにあった(笑 灯台下暗し.

ということで. 変数は {} で囲むことにします.

で,何かあったら,その時改めてルールを見直すことにします.

スッキリ.

1 ラインで if

実際にそう書きたい状況にあったので調べてみることに.

こちらはサラッとヒット.

if [ -f ${target} ]; then rm -f ${target} ;fi

でついでに,はてなブログでコードのハイライト出来るの初めて知った

のでメモ.

こういうことらしいです.

はてなブログの markdown 形式で ソースコードハイライト - memoメモ @atotto

昨日電車でぼーっとしていたら,ふと思い出して,出来ないもんかと調べてたら "スーパーpre記法" なんて情報に当たって体が 5 mm 浮く.楽しみに帰って試してみたらコイツは markdown では使えない事を知り,何がスーパーだよ(わら,なんて思っていただけに,ヒット.

でそしたら,こっちにもちゃんと書いてありました.ちまっとw

ブログのアイコンを設定できるようにしました - はてなブログ開発ブログ

ということで,おしまい.