$!の意味と使い方

More than 3 years have passed since last update.

とあるサンプルを見て$!(ダラーエクスクラメーション?ドルビックリマーク?)の意味がわからんくて小一時間意味を考えてわかったのでメモとして残します。

url=tcp://127.0.0.1:40899

./pair node0 $url & node0=$!
./pair node1 $url & node1=$!
sleep 3
kill $node0 $node1

↑の「& node0=$!」の意味がわからなかったのですが、

「ダラーエクスクラメーション」でググって一番最初に出てくるサイト


ドル記号にエクスクラメーションマーク(びっくりマーク)を付加した$!は、バックグラウンドで最も直近に実行された最後のジョブのPIDを表し


とあったので

$ echo $!

と打ってみたのですが空行が返ってきただけでした。

なので今度は

url=tcp://127.0.0.1:40899

echo $!
./pair node0 $url & node0=$!
echo $!
./pair node1 $url & node1=$!
echo $!
sleep 3
kill $node0 $node1

↑のように間に「echo $!」を入れてみました。

するとちゃんと数値が返ってきました。


22467
22468

一番上は空行ですが、2番目と3番目は数値が返ってきています。

一番下の行ではこのpidを使ってkillを行っているんですね。

kill $node0 $node1

pidを引数に取るコマンド等使うときは便利ですね。

例えばwaitとか。もちろんkillも。

やっぱUnix環境使うならシェルもわかんないとダメですね。