GNU/Linux >> Tutoriels Linux >  >> Linux

Que fait % dans les chaînes du shell Linux ?

Quand % est utilisé dans le modèle ${variable%substring} il renverra le contenu de variable avec l'occurrence la plus courte de substring supprimé du dos de variable .

Cette fonction prend en charge les modèles de caractères génériques - c'est pourquoi elle accepte l'étoile (astérisque) comme substitut pour zéro ou plusieurs caractères.

Il convient de mentionner que cela est spécifique à Bash - les autres shells Linux ne contiennent pas nécessairement cette fonction.

Si vous voulez en savoir plus sur la manipulation de chaînes dans Bash, je vous suggère fortement de lire cette page. Parmi d'autres fonctions pratiques, il - par exemple - explique ce que fait %% faire :)

Edit :j'ai oublié de le mentionner lorsqu'il est utilisé dans le modèle $((variable%number)) ou $((variable1%$variable2)) le % caractère fonctionnera comme opérateur modulo. DavidPostill a des liens de documentation plus spécifiques dans sa réponse.

Quand % est utilisé dans un contexte différent, il doit être reconnu uniquement comme un caractère normal.


Manuel de référence de Bash :extension des paramètres du shell

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

Le mot est développé pour produire un modèle comme dans l'expansion du nom de fichier. Si le modèle correspond à une partie finale de la valeur développée du paramètre , alors le résultat de l'expansion est la valeur du paramètre avec le motif correspondant le plus court (le ‘%’ cas) ou le plus long motif correspondant (le ‘%%’ cas) supprimé. Si paramètre est ‘@’ ou ‘*’, l'opération de suppression de modèle est appliquée à chaque paramètre positionnel tour à tour, et l'expansion est la liste résultante. Si paramètre est une variable tableau indicée par ‘@’ ou ‘*’, l'opération de suppression de modèle est appliquée à chaque membre du tableau à tour de rôle, et l'expansion est la liste résultante.


En expérimentant, je trouve qu'une correspondance après % est rejetée, lorsque la chaîne est entourée d'accolades (accolades).

Pour illustrer :

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

Voici le résultat :

abcd
abcd%
abcd
abcd

ab
abcd
ab
abcd
abcd%c*

Linux
  1. Linux - Que fait "make Localmodconfig" ?

  2. Que signifie `:-` dans un script shell ?

  3. Linux - Que fait l'option "nointremap" de Linux ?

  4. Qu'est-ce que Echo $ ? Faire??

  5. Que signifie la charge moyenne sous Unix/Linux ?

Qu'est-ce que le Shell sous Linux ?

Que signifie la commande Cat sous Linux ?

Qu'est-ce que cela signifie d'être "compatible sh" ?

Qu'est-ce que le sous-shell sous Linux ?

Qu'est-ce que le shell de connexion sous Linux ?

Qu'est-ce que Shebang dans Linux Shell Scripting ?