105.2基礎
スクリプトが受け取った位置パラメータの個数を整数として取得する。
使用する特殊パラメータはどれか。
× 不正解
$#を使うと引数不足や過剰を条件分岐で検査できる。$?、$$、$!はそれぞれ終了状態やPIDに関する別の特殊パラメータである。
詳細解説
誤り
$?直前のパイプラインの終了状態を表す。
誤り。$?は直前のコマンドが返した0から255の終了状態を示し、引数の数とは連動しない。
誤り
$$現在のシェルのプロセスIDを表す。
誤り。$$は現在のシェルを識別するプロセスIDで、渡した引数が増減しても同じプロセス内では変わらない。
誤り
$!直近にバックグラウンド起動したジョブのPIDを表す。
誤り。$!は直近に&で起動した非同期処理のPIDを示し、位置パラメータを数えない。
正しい
$#設定されている位置パラメータの個数を表す。
正しい。$#は$1、$2など設定中の位置パラメータ数を整数で返し、引数検査に利用できる。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'printf "%s\n" "$#"' demo one two three期待される結果
3理解のポイント
- $#は引数個数
- 位置パラメータだけを数える
- $0は含まない
確認時の注意
- 確認環境: GNU Bash 5.2 / 短命シェル
基礎のおさらい
引数検査
[ "$#" -eq 2 ]のように期待個数と比較し、usage表示やexitへ分岐できる。
shift
shiftを実行すると$1を捨てて後続引数を繰り上げるため、$#も1ずつ減る。
問題IDKP-105-621
確認環境GNU Bash 5.2 / 短命シェル
最終技術確認2026-08-13
誤り・権利侵害を報告