過去問ドリル

LinuCレベル1 シェルおよびスクリプト 問15

シェルおよびスクリプト/シェルスクリプト

シェルスクリプト内でshiftコマンドを引数なしで1回実行したときの動作として適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル1の出題範囲「シェルおよびスクリプト」に対応。実際の試験問題ではありません)

正解:A

解説

shiftは位置パラメータを左(前)へ1つずらすコマンドです。実行すると元の$1は捨てられ、$2が$1に、$3が$2になり、引数の個数を表す$#も1つ減ります。「shift 2」のように数を指定すれば、その数だけまとめてずらせます。whileループで$1を処理してはshiftする、という書き方で、個数の決まっていない引数を順に処理できます。なお$0(スクリプト名)はshiftの影響を受けません。

選択肢ごとの解説

  • A正しい。shiftで元の$1が捨てられ、$2以降が1つずつ前に詰められます。$#も1減ります。
  • B誤り。ずれる向きが逆です。shiftは前(左)へ詰めるので、$2の値が$1になります。
  • C誤り。shiftが捨てるのは先頭の1つ(引数指定時はその個数)だけで、すべては消去しません。
  • D誤り。$0はスクリプト名のままで、shiftの影響を受けません。変わるのは$1以降です。
LinuCレベル1の問題を演習モードで解く