このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

bashの $( )

bashでは、定義した変数はコマンドライン上でも二重引用符の文字列内でも展開されます。

$ format='+%Y-%m-%d'; date $format
2012-01-17

$ whom='Hanako'; echo "Hello, $whom"
Hello, Hanako

入れ子もできます。

$ whom='Hanako'; greeting="Hello, $whom"; echo "Today : $greeting"
Today : Hello, Hanako

コマンドの実行結果をコマンドライン上で利用したり変数値にセットするにはバッククォートを使います。

$ echo `date +%Y-%m-%d`
2012-01-17

$ today=`date +%Y-%m-%d`; echo "Today $today: Hello, Hanako"
Today 2012-01-17: Hello, Hanako

変数を経由しなくても、バッククォート構文と文字列を連結して使えます。

$ echo "Today: "`date +%Y-%m-%d`": Hello, Hanako"
Today: 2012-01-17: Hello, Hanako

しかしこれは、みにくいですね。次のように、$( ) を使って書くとスッキリします。

$ echo "Today: $(date +%Y-%m-%d): Hello, Hanako"
Today: 2012-01-17: Hello, Hanako

$( ) の括弧のなかにコマンドラインを書けるのです。外側で定義された変数を括弧内で使うこともできます。

$ format='+%Y-%m-%d'; echo "Today: $(date $format): Hello, Hanako"
Today: 2012-01-17: Hello, Hanako

バッククォートの代替としても使えます。

$ today=$(date +%Y-%m-%d); echo "Today $today: Hello, Hanako"
Today: 2012-01-17: Hello, Hanako

バッククォートよりずっとスマートに思えます*1

*1:でも、習慣から僕はバッククォートを使ってしまって、$()に移行できません(苦笑)。