人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

その週の最初の月曜日の日付をshell で取得したいのですが、どうすると簡単なのでしょうか?
下記のようにするとできるかなと思ったのですが、エラーになってしまいます。出力結果をコピペするときちんとでます。
>>
d=`date +%w`
S="date -d '$d days ago' +%Y%m%d"
echo $S
$S
上記を実行すると下記になる。出力結果をコピペすると、きちんと動く
date -d '2 days ago' +%Y%m%d
date: extra operand `ago\''
<<

●質問者: kaiketsu
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● a-kuma3
●50ポイント ベストアンサー

シェル変数 S に、いきなり結果を入れるなら。

S=`date -d "$d days ago" +"%Y%m%d"`


どうしても、シェル変数 S にコマンドを入れたいなら。

d=`date +%w`
S="date -d \"$d days ago\" +\"%Y%m%d\""
echo $S
eval $S



日付の書式を \" でくくらなくても動きそうな気もする。
でも、くくらないと、何となく気持ち悪いので、くくってます。



【追記】
シェル変数 S に、いきなり結果を入れる場合で、どうしても展開してる内容を確認したいなら。

d=`date +"%w"`
set -x
S=`date -d "$d days ago" +"%Y%m%d"`
set +x
echo $S

kaiketsuさんのコメント
なるほどこうかけばいいのですね。

2 ● パパトモ
●15ポイント

こうしたらどうですか?

d=`date +%w`
S=`date -d "$d days ago" +%Y%m%d`
echo $S


パパトモさんのコメント
おっと、書いている間に投稿されていましたね

3 ● y-kawaz
●20ポイント

それだと日曜日の日付になる気がしますが…、まぁワンライナーで書きたいならこんな感じで良いかと。

S=`date -d "\`date +%w\` days ago" +%Y%m%d`
echo $S

もしくは

S=`date -d \`date +%w\`\\ days\\ ago +%Y%m%d`
echo $S

とか

S=`date -d -\`date +%w\`days +%Y%m%d`
echo $S

とか


4 ● TransFreeBSD
●15ポイント

たしか、曜日直接指定できたよな、と思ったら次回の日付になっちゃうわけですね。
ならば

S=`date -d "sat 5 days ago" +%Y%m%d`
echo $S

次の土曜(今日が土曜なら今日)の5日前ってことで。
http://ideone.com/Bm8BB


a-kuma3さんのコメント
あ、ideone.com に bash あるんだ。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ