BASH: Как вы «разбиваете» команду даты? - PullRequest
3 голосов
/ 18 февраля 2010

Пользователь Cygwin здесь (хотя, если есть подходящее решение, я перенесу его в K / Ubuntu, который я также использую).

В моем .bashrc есть приветственное сообщение, которое выглядит следующим образом:

SAD=(`date +%A-%B-%d-%Y`)
DUB=(`date -u +%k:%M`)
printf "Today's Date is: ${SAD}.\n"
printf "Dublin time is now ${DUB}. (24-Hour Clock)\n"

После многочисленных попыток использовать пробелы в переменной SAD выше, я сдался и использовал дефисы.Но, по понятным причинам, я не удовлетворен этим решением по поводу лейкопластыря.Проблема, насколько я помню, заключалась в том, что каждый раз, когда я пытался использовать кавычки, \ s или какой-либо подобный escape-тег, вместе с переменными, перечисленными в соответствующем разделе справочной страницы GNU для date , переменной дляГод был либо проигнорирован, либо возвратил ошибку.То, что я не хочу делать, это прибегать к полной строке, возвращаемой date , а вместо этого соблюдать порядок, в котором у меня есть вещи в коде выше.

AsЯ пишу это, мне приходит в голову, что настройка IFS вокруг этого кода для сообщения приветствия может сработать, при условии, что впоследствии я возвращаю его к значениям по умолчанию (вышеупомянутое появляется в строках 13-17 68-строчного .bashrc).Однако я не могу вспомнить, как это сделать, и не уверен, что это сработает.

Вообще говоря, файлы .bashrc имеют допустимый синтаксис BASH, не так ли?Мои, конечно, напоминают сценарии, которые я написал сам или опробовал из других источников.Полагаю, все, чего мне не хватает, - это код для установки и снятия разделителей полей вокруг этого блока сообщений.

Нет сомнений, что любой, кто придет к решению, окажет услугу не только мне, но илюбым другим относительным новичкам в Сети, делающим свои первые (или с тринадцатого по семнадцатый) шаги в мире сценариев оболочки.

BZT

Ответы [ 5 ]

4 голосов
/ 18 февраля 2010

Ввод

SAD=$(date "+%A %B %d %Y")
DUB=$(date -u +%k:%M)
echo "Today's Date is: ${SAD}."
echo "Dublin time is now ${DUB}. (24-Hour Clock)"

в моих .bash_profile отпечатках

Today's Date is: Thursday February 18 2010.
Dublin time is now 12:55. (24-Hour Clock)

Я думаю, это то, что вы хотите.

1 голос
/ 18 февраля 2010

проблема в объявлении массива.

SAD=(date +%A-%B-%d-%Y) просто означает, что вы помещаете строку "date" в качестве элемента 0, а "+% A-% B-% d-% Y" в качестве элемента 1. посмотрите сами

$ SAD=(date +%A-%B-%d-%Y)  #<-- this is an array declaration
$ echo ${SAD[0]}
date
$ echo ${SAD[1]}
+%A-%B-%d-%Y

если вы хотите, чтобы значение команды date было в переменной, используйте $(..), например

$ SAD=$(date +%A-%B-%d-%Y)
$ echo ${SAD}
Thursday-February-18-2010
0 голосов
/ 18 февраля 2010

Я нашел комбинацию, которая работает:
SAD=$(date "+%A %B %d %Y")<br> echo $SAD<br> <strong>Thursday February 18 2010</strong>

Еще один случай, когда:

  1. Стоит задать вопрос
  2. Помогает узнать, куда поместить ваши двойные кавычки.
    дата явно не знает из указанного места, но Bash знает, поэтому
    дело в «шепоте на правое ухо».

Спасибо, ghostdog74.

BZT

0 голосов
/ 18 февраля 2010

date +%A\ %B\ %d\ %Y

0 голосов
/ 18 февраля 2010

Чтобы получить пробелы, вам нужно заключить аргумент в кавычки date, чтобы это была одна строка. Вы также ошибочно объявляете SAD и DUB как массивы, когда вы действительно хотели их оценить. Попробуйте это:

[/tmp]> $(date "+%A %B %d, %Y")
Thursday February 18, 2010
...