Первоначальный ответ
Шебанг должен быть первой строкой, чтобы быть полезной; в противном случае это просто странный комментарий.
Вы должны просто запустить cal
(с выводом на терминал - стандартный вывод), а не записывать вывод команды в переменную, которую вы затем пытаетесь выполнить.
Ваш скрипт содержит строки:
Date='cal 2000'
echo This is the calendar list for the year 2000
$Date
Последняя строка пытается выполнить программу 2000
с 462 аргументами. Чтобы сделать эту работу неопределенно разумной, вам понадобится:
Date='cal 2000'
echo "This is the calendar list for the year 2000"
echo "$Date"
Двойные кавычки имеют решающее значение для получения хорошо отформатированного вывода для значения в $date
. См. Также Захват многострочного вывода в Bash переменную .
Это должно сделать работу, как я понимаю:
#!/bin/bash
clear
echo "This is the current year."
Year="$(date '+%Y')"
cal $Year
echo "This is the time:"
date '+%r'
echo "This is the calendar for the year 2000"
cal 2000
Из комментариев
Мне не нужен календарь на 2020 год. Все, что мне нужно, - это число из четырех чисел git 2020 года, но мне все еще нужен календарь на 2000 год.
Ой! Ну, это требует некоторых тривиальных изменений в приведенном выше коде:
#!/bin/bash
clear
echo "This is the current year: $(date '+%Y')"
echo "This is the time: $(date '+%r')"
echo "This is the calendar for the year 2000"
cal 2000
Или, если вы хотите, чтобы значения в отдельной строке из описаний:
#!/bin/bash
clear
echo "This is the current year"
date '+%Y'
echo "This is the time"
date '+%r'
echo "This is the calendar for the year 2000"
cal 2000
Возможны бесконечные вариации по этому - выбор за вами. Почему 2000 год так важен, загадочно для постороннего, но с ним легко справиться, как показано.