Это скрипт:
#!/bin/bash
thedate=$(date)
var='Current date is $thedate'
echo $var
Вывод: Текущая дата - $ thedate, и я хотел бы, чтобы она показывала дату, что я сделал не так? Любая помощь будет оценена.
Проблема в том, что bash
раскрывает переменные среды только один раз, если только вы не используете eval
, что приводит к двойному анализу командной строки:
eval echo $var
Обратите внимание, что отображаемая дата и время являются текущими при thedate
даты, а не при обращении к переменной $var
. Чтобы отобразить текущее время при обращении к $var
, вам необходимо:-
var='Current date is $(date)'
eval echo $var
Было бы лучше не использовать переменные, а определить функцию:
cdate() { echo Current date is $(date); }
...
cdate
Конечно, лучше все же не использовать echo
, но пусть сама date
добавляет дополнительный текст:
cdate() { date +"Current date is %c"; }
Это не выводит совсем тот же формат, что и date
умолчанию, но для формата по умолчанию нет спецификатора формата.
var='Current date is $thedate'
Переменные не раскрываются в одинарных кавычках, поэтому присваивается строка, содержащая текстовый текст $thedate
. Вы должны использовать двойные кавычки, чтобы переменная раскрывалась.
echo $var
Кроме того, здесь вы должны использовать двойные кавычки вокруг переменной, чтобы предотвратить ее разделение на слова и расширение пути, то есть echo "$var"
. В этом конкретном случае вы можете избежать использования кавычек, поскольку дата, вероятно, не будет содержать подстановочных знаков. Но без кавычек, например, строка даты Fri Dec 7 20:41:21 EET 2018
будет выводиться как Fri Dec 7 20:41:21 EET 2018
, то есть двойной пробел после названия месяца будет свернут в один пробел.