過去問ドリル

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

シェルおよびスクリプト/シェル環境のカスタマイズ

bashで、今日の日付を「YYYY-MM-DD」形式で変数TODAYに格納したい。記述として適切なものはどれか。

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

正解:C

解説

$(コマンド) はコマンド置換と呼ばれ、括弧内のコマンドを実行した標準出力の内容に置き換えられます。date +%F は日付を「2026-09-26」のような形式で出力するため、TODAY=$(date +%F) で今日の日付が変数に入ります。古い書き方としてバッククォートで囲む `date +%F` も同じ意味ですが、入れ子にしやすく読みやすい $( ) の形が推奨されています。${変数名} は変数展開の記法で、${date +%F} のように書いてもコマンドは実行されません。

選択肢ごとの解説

  • A誤り。シングルクォートの中では展開が一切行われないため、「date +%F」という文字列そのものが代入されます。
  • B誤り。${ } はパラメータ(変数)展開の記法で、中にコマンドを書くと「bad substitution」のエラーになります。
  • C正しい。$( ) のコマンド置換により、dateコマンドの出力結果が変数TODAYに代入されます。
  • D誤り。ダブルクォートの中では変数展開は行われますが、コマンドは実行されず「date +%F」という文字列が代入されます。
LinuCレベル1の問題を演習モードで解く