Вы не можете иметь /
в @(...)
, !(...)
, *(...)
...
/
может появляться только между глобусами, даже a[x/y]b
обрабатывается как @(a\[x)/@(y\]b)
. globs сначала разбиваются на /
, и каждая часть сопоставляется с содержимым каталога. Однако при наличии расширений глобуса x(...)
ksh нет разделения на /
, которые находятся внутри (...)
, но каждая часть глобуса по-прежнему сопоставляется с именами файлов. В !(*/*)
*/*
сопоставляется с каждым именем файла в текущем каталоге. Очевидно, что ни одно имя файла не может содержать /
, поэтому оно ничему не соответствует, поэтому !(*/*)
соответствует каждому файлу.
Здесь вы можете использовать zsh
и его квалификаторы glob:
echo *(^/)
Для файлов любого типа, кроме каталога. Или быть противоположным bash
's */
(, который является любым файлом каталога типа после разрешения символической ссылки):
echo *(-^/)
(файлы, которые не являются ни каталогами, ни символическими ссылками на каталоги ).
ТЛДР:sudo ln -s $(which gcc-5) /usr/local/bin/gcc; hash -r
По умолчанию двоичный файл gcc находится в/usr/bin
Проверяя наш путь, мы видим, что /usr/local/bin
идет первым:
echo $PATH | tr ':' '\n'
/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
...
Итак, предположив, что мы установили gcc -5 (yaourt --noconfirm -S gcc5
), мы можем сделать эту версию «по умолчанию», создав символическую ссылку в /usr/local/bin
вот так:
sudo ln -s $(which gcc-5) /usr/local/bin/gcc
sudo ln -s $(which g++-5) /usr/local/bin/g++
Затем нам нужно перехешировать gcc, чтобы удалить старое запомненное расположение gcc:
hash -r
Чтобы восстановить исходную версию gcc «по умолчанию», нам просто нужно удалить эту символическую ссылку и перефразировать:
sudo rm /usr/local/bin/gcc /usr/local/bin/g++
hash -r