語を一部でもクオートしてある場合はエイリアスを使った置換は行われない。語が~で始まる場合、$HOMEの値に置き換える(チルダ展開)。$で始まる部分について、変数名を実際の値に置き換える。$(string)または`string`と記述されている部分を、コマンド展開する。$((string))と記述されている部分について、算術展開を行う。以上の処理を経た結果の文字列を、もう一度語の単位に分解する。使われた文字ではなく、変数IFSで指定された文字が区切り文字として使われる。[...]についてワイルドカード展開を行い、ファイル名を生成する。最初の語をコマンド名とみなす。特別な組み込みコマンド、関数、通常の組み込みコマンド、変数PATHを探索して最初に見つかったものの順にコマンドを探す。*2入出力のリダイレクトなど、必要な設定を行ってコマンドを実行する。なんだかごちゃごちゃしているので、例で実際に処理の流れを見てみます。ちなみに詳解シェルスクリプトのp.178には上記の処理手順がフローチャートになっており、そちらを見る方が分かりやすいです。hoge)について、処理を追ってみます。シェルで定められた構文に従って、コマンドが以下のトークンに分解される。最初の語がifやforなどの開始キーワードかどうかチェックする。echoはキーワードではないので、そのまま次へ進む。最初の語にエイリアスが存在するかどうかチェックする。echoはこれも当てはまらないので、次へ進む。すべての語に対して、チルダ展開が可能かどうかチェックされる。ここでトークン2のチルダが展開され、以下のようになる。変数展開が行われ、トークン2と3が展開される。コマンド展開が行われ、トークン4が展開される。トークン5の算術展開が行われる。変数IFSの値を区切り文字として、ここまでの処理結果を分解しなおす。ワイルドカード展開が行われ、トークン2が2つに展開される。コマンドを実行する準備が整い、echoというコマンドを検索する。コマンドが実行される!echoによって、引数の値が出力される。old.なるほど、こういう風に動いてたのか〜。*1:*や?などの特別な意味を持つ文字を、普通の文字として解釈させる方法。バックスラッシュによるエスケープや、引用符の利用がこれに当たる。手順がもう1度適用されるが、ここでは省略。Xの固有コマンドに「pbcopy」というものがあります。Vol.74でJavaScriptのメモリリークについて書きました!月別アーカイブはてなブログをはじめよう!ama-chさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。