Программа 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"
В качестве альтернативы, прочитать дату (один раз) в отдельные переменные, а затем отформатировать их в скорлупе:
#!/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"
Посмотрите здесь это может быть полезно: http://stackoverflow.com/questions/13627308/add-st-nd-rd-and-th-ordinal-suffix-to-a-number – DimaSan
Немного сурово, что ваш вопрос проголосовали, потому что вы новичок, однако, к сожалению, пользователи, которые это сделали, имели определенную причину. В следующий раз попробуйте включить некоторые примеры кода о том, что вы пробовали до сих пор. Или попробуйте написать более явные вопросы вместо одного неявного .: 1. Как я могу получить только день месяца в bash? 2. Как написать условные утверждения? 3. Как я могу заменить соответствие в строках – atevm
Боюсь, невозможно напечатать надстрочные версии этих символов в терминале, по крайней мере, переносимым образом. –