Это скрипт:
#!/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 , то есть двойной пробел после названия месяца будет свернут в один пробел.