105.2基礎
現在の$1を処理した後、元の$2を新しい$1として次の反復で扱う。
使用する組込みコマンドはどれか。
× 不正解
shiftは位置パラメータを左へ移し、既定では1個を取り除く。shift 2なら先頭2個をまとめて処理済みにできる。
詳細解説
誤り
set引数を指定すると位置パラメータを新しく設定するが、先頭だけを繰り上げる専用操作ではない。
誤り。set -- valuesなら位置パラメータ全体を指定値へ置き換えられるが、処理済みの$1だけを簡潔に除く要求とは異なる。
誤り
unset 1位置パラメータをこの構文で削除して後続を繰り上げることはできない。
誤り。unsetは変数または関数名を対象とし、数字1を指定して$1を削除し$2を繰り上げる操作にはならない。
正しい
shift$1を捨て、後続位置パラメータを1つずつ前へ移す。
正しい。引数なしのshiftは$1を破棄し、$2を$1へ、以降も1つずつ前へ移して$#を減らす。
誤り
exec現在のシェルを別プログラムへ置換する。
誤り。execは位置引数表ではなくシェルプロセス全体を別コマンドへ置換する。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'shift; printf "%s:%s\n" "$1" "$#"' demo first second third期待される結果
second:2理解のポイント
- shiftは既定で1個
- $#も減る
- $0は変わらない
確認時の注意
- 確認環境: GNU Bash 5.2 / 短命シェル
基礎のおさらい
複数shift
shift Nは先頭N個を取り除くが、現在の$#より大きい値を指定すると非0になり得る。
解析ループ
while [ "$#" -gt 0 ]; do ...; shift; doneは引数を先頭から順に解析する基本形である。
問題IDKP-105-632
確認環境GNU Bash 5.2 / 短命シェル
最終技術確認2026-08-13
誤り・権利侵害を報告