-1

Это скрипт:

#!/bin/bash

thedate=$(date)


var='Current date is $thedate'

echo $var

Вывод: Текущая дата - $ thedate, и я хотел бы, чтобы она показывала дату, что я сделал не так? Любая помощь будет оценена.

2 ответа2

1

Проблема в том, что 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 умолчанию, но для формата по умолчанию нет спецификатора формата.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .