2016-11-15 16 views
-2
私はこの形式で私の現在の日付を与えるのbashのコード、受信する必要が

:4例で日付形式 - 例

Sunday, 1^st January 2016(上付きstndrdまたはthとを)。

上付き文字はどのように受信されますか?

ご協力いただき、ありがとうございます。

+0

は、ここでこれを見て参考になるかもしれません:http://stackoverflow.com/questions/13627308/add-st-nd-rd-and-th-ordinal-suffix-to-a-number – DimaSan

+1

あなたの質問が投票されたのは少し厳しいです。あなたは初心者ですが、悲しいことにそれをやったユーザーには何らかの理由があります。次回はこれまでに試したことのあるコード例をいくつか含めるようにしてください。または明示的な質問を明示的に書くのをやめてください。: 1.月の日だけをbashで得る方法はありますか? 2.どのように条件文を書くことができますか? 3.文字列の一致を置き換えるにはどうすればいいですか – atevm

+0

私は恐らく、これらの文字の上付き文字版を、少なくとも移植可能な方法で端末に印刷することは不可能です。 –

答えて

0

私はこれが役に立てば幸い:

#!/bin/bash 

# get the day of the month to decide which postfix should be used 
dayOfMonth=$(date +%d) 

# Choose postfix 
case "$dayOfMonth" in 
    1) 
    postfix="st" 
    ;; 
    2) 
    postfix="nd" 
    ;; 
    3) 
    postfix="rd" 
    ;; 
    *) 
    postfix="th" 
    ;; 
esac 

# Generate date string 
myDate=$(date +%A,\%d\^$postfix\ %B\ %Y) 
echo $myDate 

説明:

  1. マインドコメント。

  2. dateコマンドの出力は、コマンドラインから「+」で始まる文字列でフォーマットできます。この文字列には、%dのようなvarius形式のオプションが含まれています。お使いの端末に

種類これを:

男日

マニュアルを取得し、FORMATセクションをチェックします。

Toby Speightが警告したように、深夜にアプリを実行したい場合は、一度だけコール日付:

#!/bin/bash 

# Generate date template 
dateTpl=$(date +%A,\ \%d\^postfix\ %B\ %Y) 
# get the day of the month from the template, to decide which postfix should be use 
dayOfMonth=$(echo $dateTpl | cut -d ' ' -f 2 | sed 's/\^postfix//g') 

# Choose postfix 
case "$dayOfMonth" in 
    1) 
    postfix="st" 
    ;; 
    2) 
    postfix="nd" 
    ;; 
    3) 
    postfix="rd" 
    ;; 
    *) 
    postfix="th" 
    ;; 
esac 

# Generate date string from template 
myDate=$(echo $dateTpl | sed "s/postfix/$postfix/g") 
echo $myDate 
0

dateプログラムは、序数を生産する任意の変換を持っていないので、あなたはそれの外に接尾辞を置換する必要があります:

#!/bin/bash 

d=$(date +%e) 

case $d in 
    1?) d=${d}th ;; 
    *1) d=${d}st ;; 
    *2) d=${d}nd ;; 
    *3) d=${d}rd ;; 
    *) d=${d}th ;; 
esac 

date "+%A, $d %B %Y" 

なお、ほとんどの英語スタイルのガイドは、序数の接尾辞を上付き文字として書くことを推奨します。あなたが本当にそれを主張するなら、あなたはそれを運動として扱うことができます!


二回dateを呼び出すことによって、私たちは真夜中に競合状態を危険にさらすことにも注意してください。私たちは別に、現在の時刻を見つけ、それをフォーマットすることでこれを避けることができます。

#!/bin/bash 

s=$(date [email protected]%s) 
d=$(date -d $s +%e) 

case $d in 
    1?) d=${d}th ;; 
    *1) d=${d}st ;; 
    *2) d=${d}nd ;; 
    *3) d=${d}rd ;; 
    *) d=${d}th ;; 
esac 

date -d $s "+%A, $d %B %Y" 

また、別の変数に(1回)日付を読み、その後、シェルでそれらをフォーマット:

#!/bin/bash 

IFS=_ read a d b y < <(date +%A_%e_%B_%Y) 

case $d in 
    1?) d=${d}th ;; 
    *1) d=${d}st ;; 
    *2) d=${d}nd ;; 
    *3) d=${d}rd ;; 
    *) d=${d}th ;; 
esac 

echo "$a, $d $b $y"