БАШ:Как «разделить» команду даты?
-
21-09-2019 - |
Вопрос
Здесь пользователь 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 г.
Еще один случай, когда:
- Стоит задать вопрос
- Полезно знать, где поставить двойные кавычки.
дата очевидно, не знает из кавычек, но Bash знает, поэтому
это вопрос «шепота на правое ухо».
Спасибо, Ghostdog74.
БЗТ