domenica 13 giugno 2021

Come utilizzare Brace Expansion nella Bash Shell di Linux

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

Espansione delle parentesi graffe Prima che la shell Bash esegua un comando in una finestra di terminale o una riga in uno script, controlla se è necessario eseguire delle sostituzioni sul comando. I nomi delle variabili vengono sostituiti dai relativi valori, gli alias vengono sostituiti dai comandi per i quali sono abbreviati e viene eseguita qualsiasi espansione. L’espansione delle parentesi graffe è una forma di espansione supportata da Bash.

L’espansione delle parentesi graffe è disponibile nelle shell moderne, ma potrebbe mancare alcune vecchie conchiglie. Se intendi utilizzare l’espansione delle parentesi graffe negli script, assicurati di richiamare una shell che supporti l’espansione delle parentesi graffe, come Bash:

Useremo Bash per i nostri esempi.

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

Espansioni semplici Un’espansione di parentesi graffa è contenuta tra una coppia di parentesi graffe “{}”. Può essere un elenco di elementi separati da virgole o un identificatore di intervallo. Gli spazi non sono consentiti all’interno delle parentesi graffe a meno che tu non abbia racchiuso la stringa tra virgolette “” . ”

Per un elenco separato da virgole, il processo di espansione prende ogni elemento a turno e lo passa a il comando di chiamata. In questo esempio, è echo che li stampa semplicemente in la finestra del terminale. Tieni presente che le virgole vengono ignorate.

echo {uno, due, tre , quattro} Un elenco può essere composto da parole o cifre.

echo {1,2,3,4} L’ordine degli elementi dell’elenco è completamente arbitrario.

echo (4,2,3,1)

Un intervallo di espansione ha un carattere iniziale e uno finale collegati a due punti ” .. “senza spazi bianchi Tutti gli elementi mancanti dell’elenco sono forniti au automaticamente dall’espansione in modo che venga creato l’intero intervallo dal carattere iniziale al carattere finale.

Questo stamperà le cifre da 1 per 10.

echo {1 .. 10}

La numerazione è arbitraria. Non deve iniziare da uno.

echo {3 .. 12}

È possibile specificare intervalli in modo che corrano all’indietro. Questo genererà un elenco da cinque a uno.

echo {5..1}

Gli intervalli possono includere numeri negativi.

echo {4 ..- 4}

Come accennato in precedenza, un intervallo ha un inizio e una fine personaggio. Non deve essere un numero. Può essere una lettera.

echo {q..v} Anche le lettere possono scorrere all’indietro.

echo {f..a}

Utilizzo dell’espansione delle parentesi graffe con loop È possibile utilizzare l’espansione delle parentesi graffe con intervalli nei cicli negli script.

for i in {3..7} do echo $ i done Gli intervalli di espansione delle parentesi graffe consentono di utilizzare i caratteri come variabile del ciclo.

per i in {m..q} do echo $ i done I cicli sono solitamente usati negli script , ma non c’è nulla che ti impedisca di digitarli nella riga di comando per vedere cosa succederà.

per i in {3..7}; echo $ i; fatto

per i in {m..q}; echo $ i; fatto

Concatenazione e annidamento Due espansioni adiacenti non t agire indipendentemente uno dopo l’altro. Interoperano. Ogni elemento nella prima espansione è influenzato da ogni elemento nella seconda espansione.

echo {q..v} {1..3}

Le espansioni possono anche essere annidate. Un’espansione annidata agirà sull’elemento immediatamente precedente.

echo {part-1, parte 2 {a, b, c, d}, parte 3}

Puoi anche nidificare espansioni creando un elenco delimitato da virgole di espansioni di intervallo.

echo {{5..0}, {1..5}}

Preambolo e Postscript È possibile inserire del testo prima e dopo un’espansione di parentesi graffe per includerlo nei risultati del espansione. Il testo posto davanti a un’espansione è chiamato preambolo, mentre il testo posto dietro un’espansione di parentesi graffe è chiamato poscritto.

Questo il comando utilizza un preambolo.

echo capitolo {1..3}

Questo esempio utilizza un postscript :

echo {content, paper, bilbiography} .md

E questo comando utilizza entrambi.

echo chapter- {1..4} .md

Espansione di nomi di file e directory Come probabilmente avrai intuito, uno degli usi principali delle espansioni delle parentesi graffe è creare nomi di file e directory che possono essere passati ad altri comandi. Abbiamo utilizzato 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 nomi di directory come input e utilizzare l’espansione delle parentesi graffe con esso.

Per creare rapidamente alcuni file , usa tocco :

tocco file- {1..4} .txt ls .txt

Se hai molti file con lo stesso nome di base ma estensioni di file differenti e vuoi eseguire un’operazione su un sottoinsieme di essi, le espansioni del tutore possono aiutare. Qui stiamo comprimendo un sottoinsieme di file che hanno “programma” come nome di base in un file ZIP chiamato “codice-sorgente.zip.”

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

zip codice sorgente programma {.c, .h, .css}

Questo comando creerà una copia di un file e vi aggiungerà “.bak”, facendo una copia di backup del file originale. Un punto interessante da notare è che l’espansione delle parentesi graffe contiene un elenco separato da virgole, ma il primo elemento è vuoto. Se non avessimo incluso la virgola, l’espansione non sarebbe avvenuta.

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

Per eseguire alcune azioni su due file in directory diverse, possiamo utilizzare una parentesi graffa di espansione nel percorso dei file.

In questo esempio, la directory “parentesi graffa” contiene due sottodirectory, una chiamata “nuova” e una chiamata “vecchia”. Contengono versioni diverse dello stesso set di file di codice sorgente. Useremo il programma diff per vedere le differenze tra le due versioni di “prog-1.c.”

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

Se hai uno scheletro standard di directory che devi creare all’inizio di un progetto, puoi crearle rapidamente usando l’espansione delle parentesi graffe. Il mkdir – L’opzione p (genitore) crea tutte le directory padre mancanti quando viene creata una directory figlia.

mkdir -p {source, build, man, help {/ pages, / yelp, / images}} albero

È possibile utilizzare l’espansione delle parentesi graffe con wget per scaricare più file.

In questo comando, scaricheremo i file da due directory, chiamate “test1” e “test2”. Ogni directory contiene due file chiamati “immagine1” e “immagine2”.

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

Elenco dei file file mostra i file che sono stati recuperati e come wget rinomina i file per evitare il nome si scontra con i file esistenti.

ls picture *.

Embrace the Brace Sembra che l’espansione delle parentesi graffe sia un altro dei segreti meglio custoditi di Linux. Molte persone mi dicono di non aver mai sentito parlare dell’espansione delle parentesi graffe, mentre altri mi informano che è uno dei loro trucchi da riga di comando preferiti.

Provalo e potrebbe trovare la sua strada nel tuo set di trucchi da riga di comando.

321627716