Zavolejte příkaz takto:
mkdir -- -a
--
znamená, že možnosti poté končí, takže -a
se interpretuje doslovně a ne jako možnost mkdir
. Tuto syntaxi najdete nejen v mkdir
, ale jakýkoli nástroj kompatibilní s POSIX kromě echo
a test
. Ze specifikace:
Argument -- by měl být přijat jako oddělovač označující konec možností. Všechny následující argumenty by měly být považovány za operandy, i když začínají znakem '-'. Argument -- by neměl být používán jako volba nebo jako operand.
Pomocí --
jako ochrana se doporučuje pro téměř každou akci, kde se zabýváte názvy souborů a chcete se ujistit, že neporuší příkaz, např. při přesouvání souborů ve smyčce můžete chtít volat následující, takže soubor nazvaný -i
není (in?) správně analyzován jako možnost:
mv -- "$f" new-"$f"
Nejjednodušší způsob, který by měl fungovat s jakýmkoli rozumným programem, je použít relativní název cesty před -
, např. mkdir ./-a
vytvoří adresář s názvem -a
v aktuálním pracovním adresáři.
Nejběžnějším příkladem použití tohoto „triku“ je, když chcete odstranit soubor, který začíná pomlčkou, takže můžete udělat rm ./-a
.
Důvod, proč mkdir '-a'
nebo mkdir \-a
nefunguje, protože obě tyto metody (pomocí uvozovek nebo zpětných lomítek) se používají k zabránění vaší shell (pravděpodobně bash
), aby jim nedával nějaký zvláštní význam. Od -a
stejně to pro shell neznamená nic zvláštního, nemají žádný vliv na to, jak se to předá do mkdir
.
Až po mkdir
je znepokojen, obdrží seznam argumentů z shellu a nemůže zjistit, zda jste je vložili do uvozovek nebo ne, nebo zda tam bylo zpětné lomítko. Vidí pouze jeden argument -a
. Proto potřebujete --
jak je vysvětleno v ostatních odpovědích.