Bashシェルスクリプトで年、月、日を1コマンドでそれぞれの変数に分割

2021-11-30Bash

はじめに

プログラミングで年月日の値を利用することは多いです。
僕も何度日時を操作するプログラムを記述したか。

Bashシェルスクリプトで年月日を分割取得するちょっとかわった方法を紹介します。

方法その1 : 愚直に date コマンドを3回実行

すぐに思いつくのは、 date コマンドを3回叩いて年、月、日の値をそれぞれ別の変数に代入するという方法です。

$ YEAR=$(date +%Y)
$ MONTH=$(date +%m)
$ DATE=$(date +%d)

$ echo $YEAR
2013

$ echo $MONTH
04

$ echo $DATE
16

方法その2 : set コマンドで分割

別の方法として、 set コマンドを使って一度に分割し、それぞれの変数を用意することができます。

$ set -- $(date '+%Y %m %d')

# 年を表示
$ echo $1
2013

# 月を表示
$ echo $2
04

# 日を表示
$ echo $3
16

方法その3 : 一度、配列として変数代入

コメントで「こんな方法もあるよ!」と連絡いただきました!ありがとうございます。

一度 date コマンドの実行結果を配列に代入し、添字を使って年、月、日を参照していきます。

# 配列として代入
$ YMD=(
  $(date +'%Y %m %d')
)

# 年を表示
$ echo ${YMD[0]}
2013

# 月を表示
$ echo ${YMD[1]}
04

# 日を表示
$ echo ${YMD[2]}
16

ひとこと

1コマンドで別変数に代入する方法は簡潔ではありますが、注意が必要です。

$1$2$3 という変数に代入されるため、コマンドライン引数が上書きされてしまいます。

2021-11-30Bash