105.2基礎
date +%Y%m%dの標準出力をTODAYへ代入する。
適切な記述はどれか。
× 不正解
$(COMMAND)はコマンド置換で、標準出力をシェルの単語へ置き換える。代入文では単語分割が起こらず、結果を変数へ格納できる。
詳細解説
誤り
TODAY=date +%Y%m%d代入の右辺に空白を含むコマンドを書いており、有効な単一代入にならない。
誤り。単純代入はNAME=valueという1語である必要があり、後続の+%Y%m%dは別のコマンド語になって目的を満たさない。
正しい
TODAY=$(date +%Y%m%d)コマンド置換の出力を末尾改行を除いて代入する。
正しい。$(...)内でdateを実行し、その標準出力から末尾の改行を除いた値をTODAYへ代入する。
誤り
TODAY=${date +%Y%m%d}${...}はパラメータ展開で、コマンドを実行する構文ではない。
誤り。${...}は変数名やパラメータ演算を扱う構文であり、中のdateコマンドを実行しない。
誤り
TODAY=$((date +%Y%m%d))$((...))は算術展開であり、dateコマンドを起動しない。
誤り。$((...))は整数の算術展開で、dateという外部コマンドと書式引数を起動する構文ではない。
実際に確かめる
一時的な検証環境で実行できる例です。
TODAY=$(date +%Y%m%d); printf '%s\n' "$TODAY"期待される結果
実行日の8桁の日付理解のポイント
- $(...)はコマンド置換
- 末尾改行を除去
- ${...}は変数展開
確認時の注意
- 確認環境: GNU Bash 5.2 / GNU coreutils date
基礎のおさらい
末尾改行
コマンド置換は出力末尾の連続する改行を除くが、途中の改行は結果内に残る。
入れ子
$(...)は古いバッククォート形式より引用と入れ子の境界が読みやすく、一般に優先される。
問題IDKP-105-623
確認環境GNU Bash 5.2 / GNU coreutils date
最終技術確認2026-08-13
誤り・権利侵害を報告