Команда Bash выводит правильно, но команда не найдена - PullRequest
0 голосов
/ 06 июня 2019

В моем сценарии, как часть большого выражения, у меня есть date --date="yesterday", и я тестировал в терминале.Он отлично работает, если это просто команда сама по себе, но когда я делаю что-то вроде "$(date --date="yesterday")", это вывод bash: Wed Jun 5 15:10:55 EDT 2019: command not found...

Почему добавление команды не найдено?

1 Ответ

3 голосов
/ 06 июня 2019

Поскольку $(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.

Если вы не хотите, чтобы это произошло, просто не используйте $( ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...