Bashシェルスクリプトで年、月、日を1コマンドでそれぞれの変数に分割
はじめに
プログラミングで年月日の値を利用することは多いです。
僕も何度日時を操作するプログラムを記述したか。
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
という変数に代入されるため、コマンドライン引数が上書きされてしまいます。
ディスカッション
コメント一覧
変数に取り込んだ後に分割します。
$ d=$(date ‘+%Y %m %d’)
$ dary=($d)
$ echo ${dary[0]}
2021
$ echo ${dary[1]}
11
$ echo ${dary[2]}
22
>> vinity 081さん
ありがとうございます。
確かに配列型の変数として定義してしまう、という方法もありますね。