Một dấu trừ (hay còn gọi là dấu gạch ngang) không phải là một tùy chọn, mà là một toán hạng (tức là một đối số không phải là một tùy chọn). Bởi vì điều này, đặt --
trước khi nó không có hiệu lực. Dấu gạch ngang là một toán hạng trong cd -
và vẫn là một toán hạng trong cd -- -
. Giống như các tiện ích tiêu chuẩn khác, cd
coi toán hạng là toán hạng bất kể có --
trước đó hay không.
Các cd
lệnh gán một ý nghĩa đặc biệt đối với các toán hạng -
. Bất cứ điều gì khác là một thư mục để chuyển sang. cd -- -a
chuyển sang thư mục được gọi -a
, bởi vì -a
nó không đặc biệt như một toán hạng và --
ngăn không cho cd
nó coi là một tùy chọn. Điều này không làm việc cho -
một mình mà không phải là một lựa chọn.
Đặt dấu ngoặc kép xung quanh -
sẽ không có ích, vì cuối cùng điều đó sẽ vượt qua toán hạng -
.
Do đó, cách duy nhất của bạn là tìm một cách khác để diễn đạt cùng một ý tưởng, tức là một tên khác cho cùng một thư mục. May mắn thay, có một điều dễ dàng: nếu bạn thêm ./
trước một tên tệp tương đối, nó vẫn có nghĩa là cùng một tệp. Điều ./
này làm cho một sự khác biệt không liên quan trong trường hợp của chúng tôi: CDPATH
không được tham khảo khi tên thư mục bắt đầu bằng /
, ./
hoặc ../
. Như vậy:
cd ./-
Một cách khác, vì -
là một thư mục, là thêm một /
sau nó. Thêm một /
ở cuối tên tệp đảm bảo rằng tệp được coi là một thư mục (cụ thể, lệnh sẽ hoạt động trên chính thư mục đó chứ không phải trên liên kết tượng trưng nếu tệp là một liên kết tượng trưng đến một thư mục), nhưng nếu không thì không khác nhau. Như vậy:
cd -- -/
Nhân tiện, việc viết -/
được đề xuất bởi mã hoàn thành, nhưng trong bash, nó chỉ thực sự hoạt động với --
nó trước đó, bash không có trường hợp đặc biệt nào cho cd -/
(zsh nào).