Co oznaczają te symbole w niektórych komendach terminalowych systemu Linux? [Zamknięte]

12

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, --debugmają pewne skutki na głównej commmand. Ich znaczenie w prawie wszystkich przypadkach można znaleźć na manstronach, 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ę

Przyspieszenie-G
źródło
Myślę, że to zależy od polecenia -c -Dmoże oznaczać coś w poleceniu 1 i zupełnie inną rzecz w poleceniu 2.
Uri Herrera
hej, zmieniłeś pierwsze polecenie? gdzie jest edycja: X
Rinzwind
Zmieniłem pierwszy komentarz, ponieważ zawierał on nieinformacyjne treści. Chciałbym pokazać przykłady, które są jak najbardziej względne. Zrobiłem komentarz do edycji w odpowiedniej sekcji do tego. Dzięki za rzeczy -c -D, rozumiem. Zaktualizowałem pytanie.
Przyspieszenie-G
Powiązane:  Jakie są operatory kontroli i przekierowania powłoki?
G-Man mówi „Przywróć Monikę”

Odpowiedzi:

14

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.

SaultDon
źródło
Advanced Bash-Scripting Guide - Rozdział 3 jest świetny. Dzięki.
Przyspieszenie-G,
Lista w rozdziale 3 przewodnika dla zaawansowanych skryptów bash jest niepełna i częściowo błędna. Przewodnik Advanced Bash Scripting nie jest dobrym źródłem do nauki basha. Zobacz zamiast tego mywiki.wooledge.org/BashGuide i mywiki.wooledge.org/BashFAQ .
geirha
@geirha Uważam, że ABS jest bardzo pomocny, ale jeśli chodzi o symbole w konkretnym poleceniu, wolę patrzeć na strony podręcznika, a twoje linki też są świetne - zakładki. Dzięki.
SaultDon
7

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.

roadmr
źródło
OK a co z tym >? To znak, który często widuję, myślałem, że to znaczy „kopia” czy coś. Czy to zależy również od poleceń?
Przyspieszenie-G
3

Pierwszy wyszukuje pliki kończące się .cw katalogu ~/i executes sed(usprawniony edytor), gdzie sed sszuka cybernetnewsi zmienia je w cybernet.

Drugi mi umyka ... pokazuje pusty wynik po wykonaniu.

Rinzwind
źródło
Jest to bardzo prawdopodobne, ponieważ zostało wzięte z innego pytania tutaj. Bez kontekstu prawdopodobnie nic nie robi.
Przyspieszenie-G
2

Najlepszym zasobem do nauki poleceń terminalowych jest LinuxCommand , który zawiera szczegółowe opisy najczęściej używanych poleceń.

Mark Rooney
źródło
zły link, zaktualizuj lub usuń.
flyingdrifter
2

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”

i=foo;echo $i
foo

Ale staje się bardziej złożony, jeśli twoja zmienna $ i jest również częścią ciągu

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

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 ..

echo ${i#o}
foo

echo ${i#*o}
o

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.

Pantera
źródło
1

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.

Tomek
źródło