Вопрос

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

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

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

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

БЗТ

Это было полезно?

Решение

положить

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)

Я думаю, это то, чего ты хочешь.

Другие советы

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

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

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

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

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

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

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

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

Спасибо, Ghostdog74.

БЗТ

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top