Cosa significano questi simboli in alcuni comandi del terminale Linux? [chiuso]


12

Su AskUbuntu, ho visto alcuni comandi in giro che sembrano piuttosto complicati, con molti simboli al loro interno. Per capire meglio come sono costruiti questi comandi, vorrei sapere cosa significano i simboli.

Per esempio:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

o ancora più complicato:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

Capisco molto bene che i parametri aggiungendo come -c, --debug, avere alcuni effetti sul commmand principale. Il significato di questi si trova in quasi tutti i casi nelle manpagine, quindi non è proprio quello che sto cercando.

Per favore, prova nella tua risposta per definire cosa fanno specificamente i simboli, invece di spiegare gli esempi che ho dato. Potrebbe apparire così:

" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...

Grazie in anticipo


Penso che dipende dal comando -c -Dpotrebbe significare qualcosa nel comando 1 e una cosa completamente diversa nel comando 2.
Uri Herrera,

ehi hai cambiato il primo comando? dov'è la modifica: X
Rinzwind

Ho cambiato il primo commento, perché conteneva materiale non informativo. Vorrei mostrare esempi il più relativi possibile. Ho fatto un commento di modifica nella sezione appropriata per quello. Grazie per le cose -c MrGreen, ho capito. Ho aggiornato la domanda.
Exeleration-G,

Risposte:


14

Vedere la sezione Manuale di riferimento di Bash chiamata Shell-Operation e la Guida avanzata di script Bash, capitolo 3 (Caratteri speciali) .

Mi riferisco a quelli ogni volta che ho bisogno di imparare qualcosa di nuovo sugli script di shell in Ubuntu / Linux.

Penso che troverai ABS Chapter 3 il modo più semplice per navigare per i tuoi scopi. Tutti i simboli sono visualizzati all'estrema sinistra della pagina con una descrizione immediatamente sotto di essi.


Guida avanzata agli script di Bash: il capitolo 3 è fantastico. Grazie.
Exeleration-G

L'elenco nel capitolo 3 della guida avanzata di scripting bash è incompleto e parzialmente errato. La guida Advanced Bash Scripting non è una buona risorsa per l'apprendimento di bash. Vedi invece mywiki.wooledge.org/BashGuide e mywiki.wooledge.org/BashFAQ .
geirha,

@geirha Ho trovato molto utile l'ABS, ma per i simboli in un comando specifico mi piace invece guardare le pagine man, e anche i tuoi collegamenti sono fantastici: i segnalibri. Grazie.
SaultDon

7

Sfortunatamente devi andare alle pagine man, poiché i "simboli" possono avere significati diversi a seconda del comando che li sta leggendo.

Ad esempio, nel tuo primo comando, il significato di {} e \; dipende dal comando find (man find). Il significato delle virgolette su un argomento su sed dipende da sed o bash (poiché è un parametro citato può potenzialmente essere una cosa shell). Il ~ / è sicuramente una cosa di espansione del modello bash.

Per il secondo comando complicato, per lo più echeggia roba, quindi troverai la maggior parte delle informazioni su quello nella pagina man di bash.

Per rispondere al tuo commento, i caratteri di reindirizzamento> <| vengono utilizzati per reindirizzare elementi da e verso i file (maggiore e minore dei segni) e per connettere l'output di un comando con l'input di un altro (pipe |). Vedi qui per un bel tutorial sul reindirizzamento I / O, questa è una funzionalità di progettazione molto potente della shell e del set di strumenti Unix.


OK, e che dire >? Anche questo è un segno che vedo spesso, ho pensato che significasse "copia" o qualcosa del genere. Anche questo dipende dai comandi?
Exeleration-G


3

Il primo cerca i file che finiscono .call'interno della directory ~/e executes sed(streamline editor) dove sed scerca cybernetnewse li cambia cybernet.

Il secondo mi sfugge ... mostra un risultato vuoto quando eseguito.


Questo è molto probabilmente possibile, perché è stato preso da un'altra domanda qui. Senza il contesto, probabilmente non fa nulla.
Exeleration-G,

2

La migliore risorsa che ho trovato per l'apprendimento dei comandi del terminale è LinuxCommand , che fornisce descrizioni dettagliate dei comandi più utilizzati disponibili.


link errato, si prega di aggiornare o eliminare.
flyingdrifter

2

È difficile dirti il ​​significato completo dei simboli mentre stai incollando comandi complessi.

L'eco in particolare.

Vedi man eco per -e, abilita la fuga, quindi lateer \ e è una fuga.

La maggior parte degli altri simboli sono manipolazioni di stringhe.

Quindi immagina di avere una variabile, che contiene una stringa "pippo"

i=foo;echo $i
foo

Ma diventa più complesso se la tua variabile, $ i, fa anche parte di una stringa

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

Ora puoi anche manipolare le stringhe, stampare solo una parte

Nel tuo caso

$ {i # * =} = stampa $ i, elimina la corrispondenza più breve tra * e =, ma * stesso è un carattere jolly ..

echo ${i#o}
foo

echo ${i#*o}
o

Vedi http://tldp.org/LDP/abs/html/string-manipulation.html

Quindi colpiamo una sotto shell (x ...)

Bash elaborerà i comandi nella sotto shell e restituirà l'output dei comandi.

x = (una sottostringa di i); Continua

Ora abbiamo un test, ["$ {! X}"]

Vedi: http://tldp.org/LDP/abs/html/testconstructs.html

Ed ecco dove non posso più dirtelo.

In bash, $ {! X} sarà una stringa vuota. && == logico e || è logico o

test {stringa vuota} AND echo stringa vuota o echo x

Dovresti dare più sintassi, ma sembra che questa eco stia eseguendo il piping dell'output da qualche parte.

Ancora una volta [] è un test e siamo sfuggiti a [all'inizio.

Quindi posso solo spiegare molto di ciò che sta facendo l'eco.

Il motivo per cui non viene generato alcun output quando si immette il comando echo in un terminale è che si tratta di uno snipit di codice, per impostazione predefinita né x o i sono definiti, quindi tutto l'output è vuoto.


1

Per domande sui simboli in lingue specifiche, potresti provare SymbolHound. Puoi cercare nel Web i caratteri che Google non trova.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.