Come utilizzare l'espansione di parentesi graffe in Linux Bash Shell

Contenuti

Una finestra di terminale su un sistema Linux.

L'espansione delle parentesi graffe è una tecnica utile per generare elenchi di stringhe che possono essere utilizzati in script e alias e sulla riga di comando di Linux.. Risparmia tempo ed evita errori digitando di meno.

Espansione del morsetto

Prima del guscio di Bash eseguire un comando in una finestra di terminale o in una riga in uno script, controlla se devi fare qualche sostituzione nel comando. I nomi delle variabili sono sostituiti dai loro valori, gli alias vengono sostituiti dai comandi per i quali sono abbreviati e viene eseguita l'eventuale espansione. L'espansione della chiave è una forma di espansione supportata da Bash.

L'espansione del morsetto è abilitata sugli alloggiamenti moderni, ma è possibile che manchi in alcuni vecchi casi. Se utilizzerai l'espansione di parentesi graffe nei tuoi script, assicurati di invocare una shell che supporti l'espansione della chiave, come bash:

Useremo Bash per i nostri esempi.

La generazione di elenchi di stringhe può sembrare più una novità che un vantaggio, ma offre alcune funzionalità che possono far risparmiare tempo e sequenze di tasti. Spesso, può fornire una soluzione semplice ed elegante ad un ostacolo o ad un'esigenza.

Espansioni semplici

Un'espansione chiave è contenuta tra una coppia di chiavi “{}”. Può essere un elenco di elementi separati da virgole o un identificatore di intervallo. Non sono consentiti spazi all'interno delle chiavi a meno che la catena non sia stata racchiusa tra virgolette “". “

Per un elenco separato da virgole, la procedura di espansione prende a turno ogni elemento e lo passa al comando call. In questo esempio, è echo che li stampa semplicemente nella finestra del terminale. Nota che le virgole vengono ignorate.

eco {uno,Due,tre,quattro}

Un elenco può essere composto da parole o cifre.

eco {1,2,3,4}

L'ordine degli elementi nell'elenco è assolutamente arbitrario.

eco (4,2,3,1)

Un intervallo di espansione ha un carattere iniziale e finale collegato ai due punti ” .. ”Senza spazi vuoti. L'espansione fornisce automaticamente tutti gli elementi dell'elenco mancanti, quindi l'intero intervallo viene creato dal carattere iniziale alla fine.

Questo stamperà le cifre del 1 al 10.

eco {1..10}

La numerazione è arbitraria. Non devi iniziare da uno.

eco {3..12}

È possibile specificare gli intervalli per l'esecuzione all'indietro. Questo genererà un elenco di cinque a uno.

eco {5..1}

Gli intervalli possono includere numeri negativi.

eco {4..-4}

Come abbiamo precedentemente sottolineato, un intervallo ha un inizio e una fine carattere. Non deve essere un numero. Può essere una lettera.

eco {q..v}

Le lettere possono anche andare indietro.

eco {f.. A}

Utilizzo dell'espansione del corsetto ad anello

È possibile utilizzare l'espansione delle chiavi con intervalli ciclici negli script.

per i in {3..7}
do
   echo $i
done

Gli intervalli di espansione delle chiavi consentono di utilizzare i caratteri come variabile di ciclo continuo.

per i in {m..q}
do
   echo $i
done

I cicli sono generalmente utilizzati negli script, ma non c'è nulla che ti impedisca di digitarli sulla riga di comando per vedere cosa succede.

per i in {3..7}; fai eco $i; fatto

per i in {m..q}; fai eco $i; fatto

Concatenazione e nidificazione

Due espansioni adiacenti non agiscono indipendentemente una dopo l'altra. Interoperato. Ogni elemento della prima espansione è influenzato da ogni elemento della seconda espansione..

eco {q..v}{1..3}

Le espansioni possono anche essere nidificate. Un'espansione annidata agirà sull'elemento immediatamente precedente.

eco {parte-1, parte-2{un,B,C,D},parte-3}

Inoltre puoi nidificare le espansioni creando un elenco delimitato da virgole di espansioni di intervallo.

eco {{5..0},{1..5}}

Preambolo e poscritto

Puoi posizionare il testo prima e dopo un'espansione parentesi graffa in modo che quel testo sia incluso nei risultati dell'espansione. Il testo posto davanti a un'espansione è chiamato preambolo, mentre il testo posto dietro un'espansione parentesi graffa è chiamato un poscritto.

Questo comando usa un preambolo.

eco capitolo{1..3}

Questo esempio usa un poscritto:

eco {Contenuti,carta,bilbiografia}.md

E questo comando usa entrambi.

capitolo eco-{1..4}.md

Estensione della directory e nomi dei file

Come probabilmente hai già intuito, uno degli usi principali delle espansioni di parentesi graffe è creare nomi di file e directory che possono essere passati ad altri comandi. abbiamo usato echo come un modo conveniente per vedere esattamente cosa succede quando viene attivata un'espansione. Puoi sostituire qualsiasi comando che accetta nomi di file o directory come input e utilizzare l'espansione di parentesi graffe con esso.

Per creare rapidamente alcuni file, utilizzo touch:

tocca file-{1..4}.testo
ls *.txt

Se hai molti file con lo stesso nome di base ma estensioni di file diverse e vuoi eseguire un'operazione su un sottoinsieme di essi, le espansioni chiave possono contribuire. Qui, stiamo comprimendo un sottoinsieme di file che hanno “Programma” come nome di base in un file ZIP denominato “codice sorgente.zip”.

Le directory di sviluppo contengono molti file che avranno lo stesso nome di base del programma principale. Generalmente, Non si desidera eseguire il backup o distribuire i file come file oggetto “.oh”. Questo è un modo semplice per includere solo i tipi di file di interesse.

programma di codice sorgente ZIP{.C,.h,.css}

Questo comando creerà una copia di un file e lo aggiungerà “.Bak”, Backup del file originale. Un punto interessante a cui prestare attenzione è che l'espansione della chiave contiene un elenco separato da virgole., ma il primo elemento è vuoto. Se non avessimo inserito la virgola, l'espansione non avrebbe avuto luogo.

cp brace/nuovo/prog-1.c{,.Bak}
ls brace/nuovo/prog-1.c.bak

Per eseguire qualsiasi azione su due file in directory diverse, possiamo usare un'espansione chiave nel percorso dei file.

In questo esempio, la directory “Sostegno” contiene due sottodirectory, uno chiamato “nuovo” Clicca e scarica il file “antica”. Contengono versioni diverse dello stesso insieme di file di codice sorgente. Useremo il diff programma per visualizzare le differenze tra le due versioni di “prog-1.c.”

parentesi graffa/{nuovo,vecchio}/prog-1.c

Se hai uno scheletro di directory standard che devi creare all'inizio di un progetto, puoi crearli rapidamente usando l'espansione della chiave. il mkdir -p opzione (papà) creare directory padre mancanti durante la creazione di una directory figlio.

mkdir -p {fonte,costruire,uomo,aiuto{/pagine,/guaire,/immagini}}
albero

Puoi usare l'espansione del corsetto con wget per scarica più file.

In questo comando, stiamo per scaricare file da due directory, chiamato “prova1” e “test2”. Ogni directory contiene due file denominati “immagine1” e “immagine2”.

wget https://www.URL-of-your-choice.com/test{1,2}/foto{001,002}.jpg

Elenca i file mostra i file che sono stati recuperati e come wget rinominare i file per evitare conflitti di nome con i file esistenti.

l'immagine*.*

Fissare il morsetto

Sembra che l'espansione delle chiavi sia un altro dei segreti meglio custoditi di Linux. Molte persone mi dicono che non hanno mai sentito parlare di espansione chiave, mentre altri mi informano che è uno dei loro trucchi da riga di comando preferiti.

Fai un tentativo e potresti trovare la strada per aggirare il tuo set di trucchi da riga di comando.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.