「Transwiki:Bash Shell Scripting」の版間の差分

ナビゲーションに移動 検索に移動
シェル関数内で位置パラメータ(<tt>$1</tt>や<tt>$2</tt>などに加えて <tt>$@</tt>と<tt>$*</tt>と<tt>$#</tt>も)を使用するとそれは、そのシェル関数を含むスクリプトの引数ではなく、そのシェル関数の呼び出し時の引数を参照します。スクリプト自体の引数が必要な場合、<tt>"$@"</tt>などを使って明示的にシェル関数の引数として渡す必要があります。(またシェル関数内での<tt>shift</tt>や<tt>set</tt>はそのシェル関数内の位置パラメータに影響します。スクリプト側の位置パラメータには影響しません。)
シェル関数呼び出しは、スクリプトやほとんどすべてのコマンドと同じように終了値を返します。終了値を明示的に指定するには、<tt>return</tt>コマンドを使用します。<tt>return</tt>コマンドにより、シェル関数の呼び出しを終了し、指定した終了値を返します。 (この目的で <tt>exit</tt>コマンドを使用できません。シェル関数の外部から呼び出された場合と同様にスクリプト全体を終了させます)終了値が指定されていない場合、つまり<tt>return</tt>コマンドに引数が指定されていないか<tt>return</tt>コマンドを実行せずに関数の終わりに到達すると、シェル関数は最後に実行されたコマンドの終了ステータスを返します。
A function call returns an exit status, just like a script (or almost any command). To explicitly specify an exit status, use the <tt>return</tt> command, which terminates the function call and returns the specified exit status. (The <tt>exit</tt> command cannot be used for this, because it would terminate the entire script, just as if it were called from outside a function.) If no exit status is specified, either because no argument is given to the <tt>return</tt> command or because the end of the function is reached without having run a <tt>return</tt> command, then the function returns the exit status of the last command that was run.
Incidentally, either <tt>function</tt> or <tt>( )</tt> may be omitted from a function declaration, but at least one must be present. Instead of <source lang="bash" enclose="none">function get_password ( )</source>, many programmers write <source lang="bash" enclose="none">get_password()</source>. Similarly, the <tt>{ &hellip; }</tt> notation is not exactly required, and is not specific to functions; it is simply a notation for grouping a sequence of commands into a single compound command. The body of a function must be a compound command, such as a <tt>{ &hellip; }</tt> block or an <tt>if</tt> statement; <tt>{ &hellip; }</tt> is the conventional choice, even when all it contains is a single compound command and so could theoretically be dispensed with.