1.06.2標準
Bash関数greetをgreet operatorとして呼び出す。
関数内でoperatorだけを表示する。
関数本体で参照する特殊パラメータはどれか。
× 不正解
関数の実行中は$1、$2などがその関数へ渡された位置引数を表す。呼び出し元の位置引数は関数終了後に復元される。
詳細解説
誤り
$0関数呼び出しでも通常はシェルまたはスクリプト名を表す。
$0は関数名greetではなく、通常は起動したシェルやスクリプトの名前を表す。operatorを取得できない。
誤り
$#関数へ渡された位置引数の個数を表す。
$#は関数greetへ渡された引数の個数なので、この呼び出しでは1になる。引数本文operatorではない。
正しい
$1関数へ渡された第1位置引数operatorを表す。
関数実行中の$1はgreetの後に渡した最初の引数operatorを表す。引用して表示すれば1引数として保持できる。
誤り
$?直前コマンドの終了状態を表す。
$?は直前コマンドの終了状態で、関数の第1引数とは無関係である。参照のたびに直前の実行結果で変わる。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'greet() { printf "%s\n" "$1"; }; greet operator'期待される結果
operator理解のポイント
- $1は第1引数
- $#は個数
- $0はスクリプト名系
確認時の注意
- 確認環境: GNU Bash 5.2 / 一時シェル
- $0は関数名へ置き換わらない。関数名が必要ならFUNCNAMEなどBash固有機能がある。
基礎のおさらい
関数引数
NAME arg1 arg2と呼ぶと関数内の$1と$2へ対応する。関数終了後は呼び出し元の位置引数に戻る。
引用
位置引数の内容を1つの引数として渡し直すときは"$1"のように二重引用する。
問題IDKL-102-915
確認環境GNU Bash 5.2 / 一時シェル
最終技術確認2026-08-13
誤り・権利侵害を報告