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.