Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Operazioni sulle stringhe

Esiste un ampio set di espansioni che possono essere utilizzate per operare sulle stringhe. Molte di queste espansioni sono particolarmente adatte per operazioni sui percorsi.

${#parametro}

si espande nella lunghezza della stringa contenuta da parametro. Normalmente, parametro è una stringa; tuttavia, se parametro è l'uno o l'altro @ or *, quindi l'espansione determina il numero di parametri posizionali.



[io@linuxbox~]$ foo="Questa stringa è lunga."

[io@linuxbox~]$ echo "'$foo' è lungo ${#foo} caratteri."

'Questa stringa è lunga.' è lunga 20 caratteri.

[io@linuxbox~]$ foo="Questa stringa è lunga."

[io@linuxbox~]$ echo "'$foo' è lungo ${#foo} caratteri."

'Questa stringa è lunga.' è lunga 20 caratteri.


${parametro:offset}

${parametro:offset:lunghezza}

Queste espansioni vengono utilizzate per estrarre una porzione della stringa contenuta in parametroL'estrazione inizia a offset caratteri dall'inizio della stringa e continua fino alla fine della stringa, a meno che il lunghezza è specificato.


[io@linuxbox~]$ foo="Questa stringa è lunga."

[io@linuxbox~]$ eco ${foo:5}

la stringa è lunga.

[io@linuxbox~]$ eco ${foo:5:6}

stringa

[io@linuxbox~]$ foo="Questa stringa è lunga."

[io@linuxbox~]$ eco ${foo:5}

la stringa è lunga.

[io@linuxbox~]$ eco ${foo:5:6}

stringa


Se il valore di offset è negativo, si intende che inizia dalla fine della stringa piuttosto che dall'inizio. Si noti che i valori negativi devono essere preceduti da uno spazio per evitare confusione con ${parametro:-parola} espansione. lunghezza, se presente, non deve essere inferiore a zero.

If parametro is @, il risultato dell'espansione è lunghezza parametri posizionali, a partire da

compensare.



[io@linuxbox~]$ foo="Questa stringa è lunga."

[io@linuxbox~]$ echo ${foo: -5}

lungo.

[io@linuxbox~]$ eco ${foo: -5:2}

lo

[io@linuxbox~]$ foo="Questa stringa è lunga."

[io@linuxbox~]$ echo ${foo: -5}

lungo.

[io@linuxbox~]$ eco ${foo: -5:2}

lo


${parametro#modello}

${parametro##modello}

Queste espansioni rimuovono una parte iniziale della stringa contenuta in parametro definito da modello. modello è un modello jolly come quelli utilizzati nell'espansione del percorso. La differenza tra le due forme è che # il modulo rimuove la corrispondenza più breve, mentre il ## il modulo rimuove la corrispondenza più lunga.



[io@linuxbox~]$ foo=file.txt.zip [io@linuxbox~]$ echo ${foo#*.} txt.zip

[io@linuxbox~]$ echo ${foo##*.}

chiusura

[io@linuxbox~]$ foo=file.txt.zip [io@linuxbox~]$ echo ${foo#*.} txt.zip

[io@linuxbox~]$ echo ${foo##*.}

chiusura


${parametro%modello}

${parametro%%modello}

Queste espansioni sono le stesse di # e ## espansioni sopra, tranne per il fatto che rimuovono il testo dalla fine della stringa contenuta in parametro piuttosto che dall'inizio.



[io@linuxbox~]$ foo=file.txt.zip

[io@linuxbox~]$ foo=file.txt.zip


[io@linuxbox~]$ echo ${foo%.*}

file.txt

[io@linuxbox~]$ echo ${foo%%.*}

filetto

[io@linuxbox~]$ echo ${foo%.*}

file.txt

[io@linuxbox~]$ echo ${foo%%.*}

filetto


${parametro/modello/stringa}

${parametro//modello/stringa}

${parametro/#modello/stringa}

${parametro/%modello/stringa}

Questa espansione esegue una ricerca e sostituzione sul contenuto di parametroSe viene trovato del testo corrispondente al carattere jolly modello, viene sostituito con il contenuto di stringaNella forma normale, solo la prima occorrenza di modello viene sostituito. Nel // modulo, tutte le occorrenze vengono sostituite. Il /# la forma richiede che la corrispondenza si verifichi all'inizio della stringa e /% Il modulo richiede che la corrispondenza avvenga alla fine della stringa. In ogni modulo, /stringa può essere omesso, causando la corrispondenza del testo con modello da eliminare.



[io@linuxbox~]$ foo=JPG.JPG [io@linuxbox~]$ eco ${foo/JPG/jpg} jpg.JPG

[io@linuxbox~]$ echo ${foo//JPG/jpg}

jpg.jpg

[io@linuxbox~]$ echo ${foo/#JPG/jpg}

jpg.JPG

[io@linuxbox~]$ echo ${foo/%JPG/jpg}

JPG.jpg

[io@linuxbox~]$ foo=JPG.JPG [io@linuxbox~]$ eco ${foo/JPG/jpg} jpg.JPG

[io@linuxbox~]$ echo ${foo//JPG/jpg}

jpg.jpg

[io@linuxbox~]$ echo ${foo/#JPG/jpg}

jpg.JPG

[io@linuxbox~]$ echo ${foo/%JPG/jpg}

JPG.jpg


L'espansione dei parametri è una buona cosa da sapere. Le espansioni di manipolazione delle stringhe possono essere utilizzate come sostituti di altri comandi comuni come sete e taglioLe espansioni possono migliorare l'efficienza degli script eliminando l'uso di programmi esterni. Ad esempio, modificheremo il parola più lunga programma discusso nel capitolo precedente per utilizzare l'espansione dei parametri ${#j} al posto della sostituzione del comando $(eco

-n $j | wc -c) e la sua sottoshell risultante, in questo modo:


#! / Bin / bash

# longest-word3: trova la stringa più lunga in un file per i; fai

se [[ -r $i ]]; allora max_word= max_len=0

#! / Bin / bash

# longest-word3: trova la stringa più lunga in un file per i; fai

se [[ -r $i ]]; allora max_word= max_len=0


per j in $(stringhe $i); fai

lunghezza=${#j}

se ((len > max_len )); allora max_len=$len max_word=$j

fi

fatto

echo "$i: '$max_word' ($max_len caratteri)"

fi fatto

per j in $(stringhe $i); fai

lunghezza=${#j}

se ((len > max_len )); allora max_len=$len max_word=$j

fi

fatto

echo "$i: '$max_word' ($max_len caratteri)"

fi fatto


Successivamente, confronteremo l'efficienza delle due versioni utilizzando il tempo comando:



[io@linuxbox~]$ tempo parola più lunga2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 caratteri)

[io@linuxbox~]$ tempo parola più lunga2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 caratteri)


di rose

Utente

0m3.618s

0m1.544s

di rose

Utente


sistema 0m1.768s

[io@linuxbox~]$ tempo parola più lunga3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 caratteri)

sistema 0m1.768s

[io@linuxbox~]$ tempo parola più lunga3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 caratteri)


di rose

Utente

0m0.060s

0m0.056s

di rose

Utente


sistema 0m0.008s

sistema 0m0.008s


Immagine

La versione originale dello script impiega 3.618 secondi per analizzare il file di testo, mentre la nuova versione, utilizzando l'espansione dei parametri, impiega solo 0.06 secondi-un miglioramento molto significativo.


Il miglior sistema operativo cloud computing su OnWorks: