Na AskUbuntu widziałem kilka poleceń, które wyglądają na dość skomplikowane, z dużą ilością symboli. Aby lepiej zrozumieć budowę tych poleceń, chciałbym wiedzieć, co oznaczają symbole.
Na przykład:
find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
lub nawet bardziej skomplikowane:
echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"
Rozumiem doskonale, że parametry jak dodawanie -c
, --debug
mają pewne skutki na głównej commmand. Ich znaczenie w prawie wszystkich przypadkach można znaleźć na man
stronach, więc tak naprawdę nie tego szukam.
Spróbuj w swojej odpowiedzi zdefiniować, co konkretnie robią symbole, zamiast wyjaśniać podane przeze mnie przykłady. Może to wyglądać tak:
" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...
Z góry dziękuję
command-line
Przyspieszenie-G
źródło
źródło
-c -D
może oznaczać coś w poleceniu 1 i zupełnie inną rzecz w poleceniu 2.Odpowiedzi:
Zobacz sekcję Bash Reference Manual o nazwie Shell-Operation i Advanced Bash-Scripting Guide Rozdział 3 (Znaki specjalne) .
Odnoszę się do nich za każdym razem, gdy muszę nauczyć się czegoś nowego na temat skryptowania powłoki w Ubuntu / Linux.
Myślę, że ABS Rozdział 3 jest najłatwiejszy w nawigacji do twoich celów. Wszystkie symbole są widoczne po lewej stronie, a opis bezpośrednio pod nimi.
źródło
Niestety musisz przejść do stron podręcznika, ponieważ „symbole” mogą mieć różne znaczenia w zależności od tego, które polecenie je czyta.
Na przykład w pierwszym poleceniu znaczenie {} i \; zależą od polecenia find (man find). Znaczenie cudzysłowów w argumentach sed jest zależne od sed lub bash (ponieważ jest to cytowany parametr, może potencjalnie być powłoką). ~ / Jest zdecydowanie rozszerzeniem wzorca bash.
W przypadku drugiego skomplikowanego polecenia są to głównie echa, więc większość informacji na ten temat znajdziesz na stronie podręcznika użytkownika bash.
Aby odpowiedzieć na Twój komentarz na ten temat, znaki przekierowania> <| są używane do przesyłania potoków z plików i do plików (większych i mniejszych niż znaki) oraz do łączenia danych wyjściowych polecenia z danymi wejściowymi innej osoby (potok |). Zobacz tutaj fajny samouczek na temat przekierowywania we / wy, jest to bardzo potężna funkcja projektowania powłoki i zestawu narzędzi systemu Unix.
źródło
>
? To znak, który często widuję, myślałem, że to znaczy „kopia” czy coś. Czy to zależy również od poleceń?Pierwszy wyszukuje pliki kończące się
.c
w katalogu~/
iexec
utessed
(usprawniony edytor), gdzie seds
szukacybernetnews
i zmienia je wcybernet
.Drugi mi umyka ... pokazuje pusty wynik po wykonaniu.
źródło
Najlepszym zasobem do nauki poleceń terminalowych jest LinuxCommand , który zawiera szczegółowe opisy najczęściej używanych poleceń.
źródło
Trudno powiedzieć pełne znaczenie symboli podczas wklejania złożonych poleceń.
W szczególności echo.
Zobacz echo człowieka dla -e, umożliwia ucieczkę, więc później \ e jest ucieczką.
Większość innych symboli to manipulacje ciągami.
Wyobraź sobie, że masz zmienną, która zawiera ciąg „foo”
Ale staje się bardziej złożony, jeśli twoja zmienna $ i jest również częścią ciągu
Teraz możesz również manipulować ciągami, drukować tylko część
W Twoim przypadku
$ {i # * =} = print $ i, Usuń najkrótsze dopasowanie pomiędzy * a =, ale * sam jest symbolem wieloznacznym ..
Zobacz http://tldp.org/LDP/abs/html/string-manipulation.html
Następnie trafiliśmy w powłokę pomocniczą (x ...)
Bash przetworzy polecenia w podpowłoce i zwróci wynik poleceń.
x = (podłańcuch i); kontyntynuj
Teraz mamy test, [„$ {! X}”]
Zobacz: http://tldp.org/LDP/abs/html/testconstructs.html
I tutaj nie mogę ci nic więcej powiedzieć.
W bash $ {! X} będzie pustym ciągiem. && == logiczne i || jest logiczne lub
test {pusty ciąg} ORAZ echo pusty ciąg lub echo x
Trzeba by podać więcej składni, ale wygląda na to, że to echo przesyła gdzieś swoje wyjście.
Znowu [] jest testem i uniknęliśmy [na samym początku.
Mogę więc tylko tyle wyjaśnić, co robi echo.
Powodem, dla którego nie ma danych wyjściowych po wprowadzeniu polecenia echo w terminalu, jest fragment kodu, domyślnie ani x ani i nie są zdefiniowane, więc wszystkie dane wyjściowe są puste.
źródło
W przypadku pytań dotyczących symboli w określonych językach możesz wypróbować SymbolHound. Możesz wyszukiwać w Internecie znaki, których Google nie znajduje.
źródło