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