以下を試しましたが失敗しました。日付形式を出力する必要があります。
--------最初の試み--------
#!/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
date
2番目の問題は、使用しているコマンドがどのように実装されているかわからないようです。 GNUにはフラグdate
がありません-j
。ただし、このフラグは他の実装で使用できますdate
(BSDシステムでは、ユーティリティは指定された日付スタンプを解析して出力しますが、置く日付)。
$temp
3番目の問題は、Convert to YYYYMMDD
formatを使用したいと思いますが、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
今日の日付の横に印刷しようとしていますか?
$
コマンドの変数の前に次のものが来たくありません。temp
read
#!/bin/bash
echo "read date yyyymmdd"
read temp
echo "${temp} + $(date '+%Y%m%d')"