Często zdarza się, że chcę zastosować operację rekurencyjnie. Niektóre polecenia, takie jak grep, używają małej litery r, aby wskazać rekurencję. Na przykład
grep -r foo .
Wydaje się, że inne polecenia wolą wielką literę R:
chmod -R 755 .
Ciągle źle je rozumiem i zapominam, która jest która. Czy istnieje logika wyboru wielkości liter dla tych argumentów?
--recursive
, prawdopodobnie nie zrobią nic złego.-r
Odpowiedzi:
Większość poleceń POSIX, które mają możliwość przejścia rekurencyjną katalog (
ls
,chmod
,chgrp
,chmod
,cp
,rm
) mają-R
za to.rm
również-r
dlatego, że tak było początkowo na długo przed POSIX.Teraz zachowanie zmienia się, gdy podczas przechodzenia po drzewie znajdują się dowiązania symboliczne. POSIX starał się zachować spójność, dodając opcje
-L
/-H
/,P
aby dać użytkownikowi szansę decydowania o tym, co zrobić z dowiązaniami symbolicznymi, pozostawiając domyślną, gdy żadne nie zostanie podane nieokreślone.POSIX
grep
nie ma-r
lub-R
.GNU
grep
początkowo nie miał żadnego.-r
został dodany w 1998 roku. To było po dowiązaniach symbolicznych.-R
został dodany jako synonim w 2001 roku dla spójności z innymi narzędziami. To wciąż śledziło dowiązania symboliczne.W 2012 r. (Grep 2.12)
-r
został zmieniony, aby przestał podążać za dowiązaniami symbolicznymi, być może dlatego-L
, że-H
były już używane do czegoś innego.BSD
grep
były oparte na GNU grep przez długi czas. Niektóre z nich przepisały własne i zachowały mniej więcej zgodność z GNUgrep
. Apple OS / X inaczej rozwiązał problem dowiązania symbolicznego.-r
i-R
są takie same i nie podążaj za dowiązaniami symbolicznymi. Istnieje-S
opcja jednak, że zachowuje się jakchmod
/cp
/find
„s-L
opcją śledzenia dowiązania.źródło
rm
miał opcję rekurencyjną przed innymi. Tak było-r
. Następniecp
zdobył dopasowanie-r
. Potemls
chciał mieć opcję rekurencyjną, alels -r
już miał na myśli „sortowanie odwrotne”, więc tak musiało być-R
. Istnieje napięcie między-R
i-r
się zaczęło.-R
był jedynym, który można było konsekwentnie dodawać do każdego odpowiedniego narzędzia, alerm -r
był już dobrze znanym tradycyjnym zastosowaniem. Potem pojawił się GNU i powiedział: „konsekwencja i tradycja dotyczą kwadratów, człowieku!”Absolutnie nic. Zależy to po prostu od tego, co wybrali programiści. Jest to często, ponieważ oba
-r
i-R
są poprawne opcje. W programach, które zacytowałeś, na przykład:najnowsze wersje GNU
grep
:chmod
nie ma-r
opcji, więc prawdopodobnie twórcy wolą-R
. Oczywiście-r
jest to jednak prawidłowy ciąg uprawnień (jak wskazał @Arkadiusz Drabczykso), więc nie można go tak naprawdę użyć.źródło
grep
wersja GNU grep 2.12-r
i-R
są takie same. Z chmod-R
jest zdefiniowany przez POSIX.grep (GNU grep) 2.15
i pamiętam, że widziałem to w poprzednich wersjach. Jesteś pewien, że tak nie jest w twoim przypadku? Zapewniają zasadniczo takie same wyniki w większości przypadków, zachowują się inaczej tylko z linkami. Jeśli chodzi ochmod
, to może również zostać zdefiniowana przez POSIX ale to nadal, prawdopodobnie, ponieważ oryginalnechmod
deweloperów wybrałR
ponadr
.-r
ponieważ jest to już prawidłowy ciąg uprawnień.W większości sprowadza się to do osobistych preferencji programisty. Czasami jednak wybierana jest wielka litera, jeśli preferowana jest mała litera dla czegoś innego, co zdaniem deweloperów jest ważniejsze niż, na przykład, działanie rekurencyjne. W przypadku chmod
-r
jest to poprawny tryb. Na przykład:źródło
Tam, gdzie to możliwe, użyj wersji GNU tych narzędzi, a następnie możesz użyć dłuższych nazw dla opcji.
Nie.
Lub niewiele. Narzędzia uniksowe zostały opracowane fragmentarycznie, a opcje poleceń odzwierciedlają indywidualne wybory ich głównych lub wyłącznych twórców. Dostępnych jest tylko 26 małych liter opcji ASCII, co jest preferowanym zestawem (polecenia są na ogół pisane małymi literami, aby ułatwić pisanie), a ten ograniczony zestaw prowadzi do konfliktów mnemonicznych. Konflikty prowadzą do niespójności, ponieważ nowe wersje poleceń / narzędzi zyskały nowe funkcje .
źródło
20 lat temu, kiedy nauczyłem się systemu UNIX, mój mentor powiedział mi w ten sposób: „Lepiej zawsze wpisuj opcję rekurencyjną wielkimi literami R. Zawsze ponieważ niektóre polecenia mają inne znaczenie dla opcji r małych, ale wielkie litery R działają głównie jako opcja rekurencyjna wszędzie. I da ci dobry nawyk, aby zachować ostrożność na [rm * -Rf], denerwując naciśnięcie klawisza Shift podczas pisania R. ”
źródło