Zastanawiałem się, jak utworzyć plik o nazwie jako flaga, np. Jeśli chciałbym utworzyć folder o nazwie -a
, jakie polecenia by to załatwiły?
Próbowałem mkdir '-a'
, mkdir \-a
i nie działało. Jestem na Ubuntu.
linux
ubuntu
command-line-arguments
MOJA V
źródło
źródło
Odpowiedzi:
Wywołaj polecenie tak:
Te
--
środki, które opcje zakończy po tym, więc-a
dostaje interpretować dosłownie, a nie jako opcjamkdir
. Znajdziesz tę składnię nie tylko wmkdir
, ale w dowolnym narzędziu zgodnym z POSIX, z wyjątkiemecho
itest
. Ze specyfikacji :Użycie
--
jako zabezpieczenia jest zalecane w prawie każdej akcji, w której masz do czynienia z nazwami plików i chcesz się upewnić, że nie złamią one polecenia, np. Podczas przenoszenia plików w pętli możesz wywołać następujące, aby plik o nazwie-i
„ t (in?) poprawnie przeanalizowane jako opcja:źródło
cc -o -myfile -Wall -myfile.c
jako tylko nieco wymyślony przykład. Każdy edytor wart swojej soli powinien mieć możliwość zapisania do pliku o nazwie,-myfile.c
jeśli o to poprosisz, ale kompilator C prawdopodobnie nie zrobi tego, co chcesz, gdy otrzyma taką listę opcji.cc
polecenie podane powyżej przez Michaela, które ma-o
opcję określenia pliku wyjściowego.for f in ./*; do...
zamiastfor f in *; do...
Najprostszym sposobem, który powinien działać z dowolnym rozsądnym programem, jest użycie względnej nazwy ścieżki przed
-
, np.mkdir ./-a
Utworzy katalog nazwany-a
w bieżącym katalogu roboczym.Najczęstszym przykładem użycia tej „sztuczki” jest usunięcie pliku rozpoczynającego się od myślnika, abyś mógł to zrobić
rm ./-a
.źródło
./
jest zawsze dobrym pomysłem - wyobraź sobie, że utworzyłeś plik o nazwie,-rf
a następnie zadzwoniłeśrm *
.--
nie jest rozumiany przez wszystkie polecenia, tylko kilka)--
była bash, więc powinno działać dla wszystkich programów?Powodem,
mkdir '-a'
lubmkdir \-a
nie jest praca, bo obie te metody (z wykorzystaniem cytatów lub odwrotne ukośniki) są stosowane, aby zapobiec skorupę (prawdopodobniebash
) od dając im żadnego specjalnego znaczenia. Ponieważ i-a
tak nie oznacza to nic specjalnego dla powłoki, nie mają one wpływu na to, jak zostanie ona przekazanamkdir
.Jeśli chodzi o
mkdir
to, otrzymuje listę argumentów z powłoki i nie może powiedzieć, czy umieścisz je w cudzysłowie, czy też wystąpił odwrotny ukośnik. Widzi tylko jeden argument-a
. Dlatego potrzebujesz--
wyjaśnienia w innych odpowiedziach.źródło
Oprócz odpowiedzi z „slhck” istnieje jeszcze jedna sztuczka, która czasem działa:
Umieść nazwę pliku w dwóch zestawach (różnych) qoutes takich jak
"'-a'"
lub'"-a"'
.To, czy to zadziała, zależy od programu, ale jest to ostateczność, jeśli program nie obsługuje funkcji POSIX
--
.Metoda POSIX jest zawsze preferowana, ponieważ jest w 100% niezawodna.
źródło
--
do zakończenia przetwarzania opcji zakłada również, że nie potrzebujesz żadnych opcji śledzenia nazwy pliku, co nie zawsze ma miejsce.'-a'
lub"-a"
przynajmniej w systemach typu BSD