Поскольку $(foo)
означает запуск команды foo
, захват ее вывода и вставку его в командную строку.
Например:
cat ab$(echo cd)
сначала запускает echo cd
, захватывает его вывод (cd
), затем вставляет его в командную строку, давая
cat abcd
затем запускается cat abcd
.
Когда вы запускаете
"$(date --date="yesterday")"
сначала он выполняет date --date="yesterday"
, захватывает свой вывод (Wed Jun 5 15:10:55 EDT 2019
), затем вставляет его обратно в командную строку, давая
"Wed Jun 5 15:10:55 EDT 2019"
Затем он пытается выполнить это как команду, которая завершается неудачей, поскольку Wed Jun 5 15:10:55 EDT 2019
не является именем исполняемого файла.
Если вы не использовали кавычки вокруг $( )
, т.е.
$(date --date="yesterday")
это закончилось бы попыткой запустить
Wed Jun 5 15:10:55 EDT 2019
и ошибка была бы bash: Wed: command not found
.
Если вы не хотите, чтобы это произошло, просто не используйте $( )
.