2010-02-18 5 views
3

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

У меня есть приветственное сообщение в моем .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 для , датой, переменная для Year была либо проигнорирована или возвратил ошибку. То, что я не хочу делать, - это прибегнуть к полной строке, возвращенной датой, а скорее сохранить порядок, в котором у меня есть вещи в коде выше.

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

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

Без сомнения, любой, кто придумает решение, будет оказывать услугу не только мне, но и любым другим родственникам-новичкам в Сети, проводя их первые (или тринадцатый-семнадцатый) шаги в мире сценариев оболочки.

BZT

ответ

4

Ввод

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) 

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

+0

Самые быстрые ответы на любые вопросы, которые я разместил в любой точке сети. Но для отставания от рекламного сервера StackOverflow я мог видеть их, поскольку они были укладкой (npi) вверх. Я благодарю всех респондентов, кроме меня. BZT – silversleevesx

1

проблема заключается в объявлении массива.

SAD=(date +%A-%B-%d-%Y) просто означает, что вы помещаете строку "дата" в качестве элемента 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 

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

$ SAD=$(date +%A-%B-%d-%Y) 
$ echo ${SAD} 
Thursday-February-18-2010 
0

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

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

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

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

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

Thank you ghostdog74.

BZT