Ах, ха! Проблема в пути, который я экспортирую: ~ / miniconda / bin
правильно оценивается в bash
, но env
не обрабатывает его. Изменение пути, экспортированного с .bash_profile
на / Users / aa / miniconda3 / bin /
, решает проблему. Теперь обе env python -V
и python -V
возвращают новую версию.
Есть тонкость в том, как работает расширение с подстановочными знаками. Перейдите в каталог, в котором нет файлов .jpg, введите
echo *.jpg
, и он выдаст
*.jpg
. В частности, строка * .jpg остается неизменной. Однако если вы перейдете в каталог, содержащий файлы .jpg, например, предположим, что у нас есть два файла: image1.jpg и image2.jpg, тогда команда echo * .jpg не будет выводить
image1.jpg image2.jpg
, а * .jpg будет расширен .
Если вы наберете
find . -name *.jpg
и при этом в каталоге, в котором вы находитесь, нет файлов .jpg, тогда find получит аргументы «.», «-Name» и «* .jpg». Если, однако, вы наберете эту команду в каталоге, содержащем файлы .jpg, например image1.jpg и image2.jpg, тогда find получит аргументы «.», «-Name», «image1.jpg» и «image2.jpg». ", поэтому фактически запустит команду
find . -name image1.jpg image2.jpg
и find будет жаловаться. Что действительно может сбить с толку, если вы опустите кавычки, так это наличие одного файла .jpg (скажем, image1.jpg). Тогда расширение подстановочного знака приведет к
find . -name image1.jpg
, и команда find найдет все файлы с базовым именем image1.jpg.
В сторону: Это действительно приводит к полезной идиоме bash для проверки, соответствуют ли какие-либо файлы заданному шаблону:
if [ "$(echo *.jpg)" = "*.jpg" ]; then
# *.jpg has no matches
else
# *.jpg has matches
fi
хотя имейте в виду, что это не сработает, если в текущем каталоге есть файл с именем '* .jpg'. Для большей герметичности вы можете сделать
if [ "$(echo *.jpg)" = "*.jpg" ] && [ ! -e "*.jpg" ]; then
# *.jpg has no matches
else
# *.jpg has matches
fi
(Хотя это не имеет прямого отношения к вопросу, я добавил это, поскольку он иллюстрирует некоторые аспекты того, как работает расширение с подстановочными знаками.)
Вам нужно экранировать звездочку в шаблоне имени, потому что find
хочет выполнить собственное расширение глобуса во всех различных каталогах, которые он ищет . Если не экранировать, *
будет расширен оболочкой, и только для текущего каталога. Это, скорее всего, приведет к незаконному вызову находки
.