/usr/bin/dash: Difference between revisions
Line 245: | Line 245: | ||
=== Short-Circuit List Operators === | === Short-Circuit List Operators === | ||
"&&"と"||"はAND-ORリスト演算子である。 "&&"は、最初のコマンドを実行し、最初のコマンドの終了ステータスがゼロの場合に限り、2番目のコマンドを実行する。 "||"も同様だが、最初のコマンドの終了ステータスがゼロでない場合にのみ、2番目のコマンドを実行する。 "&&"と"||"はどちらも同じ優先度を持つ。 | |||
フロー制御構文 - if、while、for、case | |||
ifコマンドの構文は以下の通りである。 | |||
if list | if list | ||
Line 260: | Line 257: | ||
fi | fi | ||
whileコマンドの構文は以下の通りである。 | |||
while list | while list | ||
Line 266: | Line 263: | ||
done | done | ||
最初のリストの終了ステータスがゼロの間、2つのリストが繰り返し実行される。 untilコマンドも似ているが、whileの代わりにuntilという単語があり、最初のリストの終了ステータスがゼロになるまで繰り返される。 | |||
forコマンドの構文は以下の通りである。 | |||
for variable [ in [ word ... ] ] | for variable [ in [ word ... ] ] | ||
Line 276: | Line 271: | ||
done | done | ||
inに続く単語が展開され、変数に各単語が順番にセットされた状態でリストが繰り返し実行される。 in word ...を省略すると、in "$@"と同じになる。 | |||
break and continueコマンドの構文は以下の通りである。 | |||
break [ num ] | break [ num ] | ||
continue [ num ] | continue [ num ] | ||
Breakは、最も内側のforまたはwhileループを終了させる。 Continueは、最も内側のループの次の反復を続ける。 これらは組み込みコマンドとして実装されている。 | |||
caseコマンドの構文は以下の通りである。 | |||
case word in | case word in | ||
Line 294: | Line 287: | ||
esac | esac | ||
パターンは実際には1つ以上のパターン(後述のシェルパターンを参照)にすることができ、"|"文字で区切られる。 パターンの前の"("文字はオプションである。 | |||
コマンドをグループ化する | |||
コマンドは | |||
(list) | (list) | ||
Line 306: | Line 299: | ||
{ list; } | { list; } | ||
これらのうち最初のものは、サブシェル内のコマンドを実行する。 (リスト)にグループ化された組み込みコマンドは、現在のシェルに影響を与えない。 2番目の形式は、別のシェルをフォークしないので、少し効率的である。 このようにコマンドをグループ化することで、あたかも1つのプログラムであるかのように出力をリダイレクトすることができる: | |||
{ printf " hello " ; printf " world\n" ; } > greeting | { printf " hello " ; printf " world\n" ; } > greeting | ||
他のコマンド引数としてではなく、予約語として認識されるように、"}"は制御演算子(ここでは";")の後に続かなければならないことに注意。 | |||
関数 | |||
関数定義の構文は以下の通りである。 | |||
name () command | name () command | ||
実行されると、nameという名前の関数がインストールされ、終了ステータスはゼロを返す。 コマンドは通常、"{"と"}"で囲まれたリストである。 | |||
変数は、localコマンドを使用することで、関数に対してlocalであることを宣言することができる。 これは関数の最初のステートメントとして記述する。 | |||
local [variable | -] ... | local [variable | -] ... | ||
localは組み込みコマンドとして実装されている。 | |||
変数をlocalにすると、その変数の初期値、エクスポートとリードオンリーのフラグを、周囲のスコープに同じ名前の変数があれば、その変数から継承する。 そうでない場合、変数は初期値として設定されない。 シェルは動的スコープを使用するため、変数xを関数fのlocalにし、その関数fが関数gを呼び出した場合、gの内部で作成された変数xへの参照は、xという名前のグローバル変数ではなく、fの内部で宣言された変数xを参照することになる。 | |||
localにできる唯一の特別なパラメーターは"-"である。 localに"-"を指定すると、関数内でsetコマンドによって変更されたシェル・オプションは、関数が戻ったときに元の値に戻される。 | |||
returnコマンドの構文は以下の通りである。 | |||
return [exitstatus] | return [exitstatus] | ||
現在実行中の関数を終了させる。 returnは組み込みコマンドとして実装されている。 | |||
=== Variables and Parameters === | === Variables and Parameters === |