Linuxで日付をランタイム変数として取得する方法

Linuxで日付をランタイム変数として取得する方法

以下を試しましたが失敗しました。日付形式を出力する必要があります。

--------最初の試み--------

#!/bin/bash
echo "read date yyyymmdd"

read $temp

dd=$(date -j -f '%Y%m%d' "$temp" +'%Y%m%d')

echo $dd

出力:invalid option -- 'j'

--------2回目の試み-------

#!/bin/bash

echo "read date yyyymmdd"

read $temp

dd=$(date -d "$temp" +'%Y%m%d')

echo $dd

出力:今日の日付を印刷してください。

答え1

主な問題はですread $temp。変数で何かを読み取るには、プレフィックスを使用しないでください$(変数の値にアクセスします)。

read temp

date2番目の問題は、使用しているコマンドがどのように実装されているかわからないようです。 GNUにはフラグdateがありません-j。ただし、このフラグは他の実装で使用できますdate(BSDシステムでは、ユーティリティは指定された日付スタンプを解析して出力しますが、置く日付)。

$temp3番目の問題は、Convert to YYYYMMDDformatを使用したいと思いますが、dateすでにこの形式で日付を入力するようにユーザーに要求しているため、変換が機能しないことです。

スクリプトの変更されたバージョン(GNU用に書かれている)とdate実行したいことが明確ではないため、3番目の質問については何もしません。実際にしたい):

#!/bin/bash

read -p 'Enter date (YYYYMMDD): ' indate
date -d "$indate" +'%Y%m%d'

もしみんなあなたがしたいのは、日付を変数に入れて出力するだけです。これにより、ユーザーに日付を尋ねる理由はありません。

#!/bin/sh

thedate=$( date +'%Y%m%d' )
printf 'The date is %s\n' "$thedate"

または後で使用するために変数に保存する必要がない場合

#!/bin/sh

date +'The date is %Y%m%d'

答え2

それでは、変数へのいくつかの入力を読んで$temp今日の日付の横に印刷しようとしていますか?

$コマンドの変数の前に次のものが来たくありません。tempread

#!/bin/bash
echo "read date yyyymmdd"
read temp
echo "${temp} + $(date '+%Y%m%d')"

関連情報