GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa fa % nelle stringhe della shell di Linux?

Quando % è usato nel pattern ${variable%substring} restituirà il contenuto di variable con la ricorrenza più breve di substring cancellato dal retro di variable .

Questa funzione supporta i modelli di caratteri jolly:ecco perché accetta la stella (asterisco) come sostituto di zero o più caratteri.

Va detto che questo è specifico di Bash - altre shell Linux non contengono necessariamente questa funzione.

Se vuoi saperne di più sulla manipolazione delle stringhe in Bash, ti consiglio vivamente di leggere questa pagina. Tra le altre utili funzioni, ad esempio, spiega cosa significa %% fare :)

Modifica:ho dimenticato di dirlo quando è usato nel modello $((variable%number)) o $((variable1%$variable2)) il % carattere funzionerà come operatore modulo. DavidPostill ha collegamenti alla documentazione più specifici nella sua risposta.

Quando % viene utilizzato in contesti diversi, dovrebbe essere riconosciuto solo come carattere normale.


Manuale di riferimento di Bash:espansione dei parametri della shell

${parameter%word}
${parameter%%word}

La parola viene espanso per produrre un modello proprio come nell'espansione del nome file. Se il modello corrisponde a una parte finale del valore espanso di parametro , allora il risultato dell'espansione è il valore di parametro con il modello di corrispondenza più breve (il ‘%’ caso) o il modello di corrispondenza più lungo (il ‘%%’ caso) cancellato. Se parametro è ‘@’ o ‘*’, l'operazione di rimozione del modello viene applicata a turno a ciascun parametro posizionale e l'espansione è l'elenco risultante. Se parametro è una variabile array con indice ‘@’ o ‘*’, l'operazione di rimozione del modello viene applicata a turno a ciascun membro dell'array e l'espansione è l'elenco risultante.


Sperimentando, scopro che una corrispondenza dopo % viene scartata, quando la stringa è racchiusa tra parentesi graffe (parentesi graffe).

Per illustrare:

touch abcd         # Create file abcd

for file in ab*; do
 echo $file        # echoes the filename
 echo $file%       # echoes the filename plus "%"
 echo ${file%}     # echoes the filename
 echo "${file%}"   # echoes the filename
 echo
 echo "${file%c*}" # Discard anything after % matching c*
 echo "${file%*}"  # * is not greedy
 echo ${file%c*}   # Without quotes works too
 echo "${file%c}"  # No match after %, no effect
 echo $file%c*     # Without {} fails
done

Ecco l'output:

abcd
abcd%
abcd
abcd

ab
abcd
ab
abcd
abcd%c*

Linux
  1. Linux:cosa fa "make Localmodconfig"?

  2. Cosa significa `:-` in uno script di shell?

  3. Linux:cosa fa l'opzione "nointremap" di Linux?

  4. Cosa fa Eco $? Fare??

  5. Cosa significa carico medio su Unix/Linux?

Che cos'è la shell in Linux?

Cosa significa Cat Command in Linux?

Cosa significa essere "sh compatibile"?

Che cos'è Subshell in Linux?

Che cos'è Login Shell in Linux?

Che cos'è Shebang negli script della shell di Linux?