Один минус (иначе тире) - это не опция, а операнд (то есть аргумент, который не является опцией). Из-за этого постановка --перед ним не имеет никакого эффекта. Тире является операндом в cd -и все еще операндом в cd -- -. Как и другие стандартные утилиты, cdоперанд обрабатывается как операнд независимо от того, есть ли --перед ним.
Команда cdприсваивает операнду особое значение -. Все остальное - это каталог для переключения. cd -- -aпереключается на каталог с именем -a, потому что -aне является специальным операндом и не --позволяет cdрассматривать его как опцию. Это не работает в -одиночку, что не вариант.
Помещение кавычек -не поможет, так как в конечном итоге это -все равно пропустит операнд .
Поэтому вы можете найти другой способ выразить ту же идею, то есть другое имя для того же каталога. К счастью, есть простое: если вы добавите ./перед относительным именем файла, это все равно означает тот же файл. Значение ./действительно имеет значение, которое не имеет значения в нашем случае: CDPATHне используется, когда имя каталога начинается с /, ./или ../. Таким образом:
cd ./-
Другой способ, поскольку -каталог является добавлением /после него. Добавление /в конце имени файла гарантирует, что файл будет рассматриваться как каталог (в частности, команда будет работать с самим каталогом, а не с символической ссылкой, если файл является символической ссылкой на каталог), но в противном случае делает нет разницы. Таким образом:
cd -- -/
-/Кстати, написание написано в коде завершения, но в bash он --до этого работает только на самом деле , у bash нет особого случая для cd -/(zsh делает).