web-dev-qa-db-fra.com

Que fait $ {0% / *} dans les scripts Shell?

Désolé si c'est une question stupide, mais j'ai cherché à ce sujet sans succès.

Que fait exactement la deuxième ligne?

#!/bin/sh
cd ${0%/*} || exit 1

Je sais que le premier est le Shebang, le second essaie de changer de répertoire mais la partie déroutante est ${0%/*}.

Pouvez-vous s'il vous plaît m'expliquer cette deuxième ligne?

17
Navaro

${0} est le premier argument du script, c’est-à-dire le nom ou le chemin du script. Si vous lancez votre script en tant que path/to/script.sh, alors ${0} sera exactement cette chaîne: path/to/script.sh.

La partie %/* modifie la valeur de ${0}. Cela signifie: prenez tous les caractères jusqu'à / suivi d'un nom de fichier. Dans l'exemple ci-dessus, ${0%/*} sera path/to.

Vous pouvez le voir en action sur votre shell:

$ x=path/to/script.sh
$ echo "${x%/*}"
path/to

Sh prend en charge de nombreux autres types de "substitution de paramètres". Voici par exemple comment prendre le nom du fichier à la place du chemin:

$ echo "${x##*/}"
script.sh

En règle générale, % et %% suppriment les suffixes, tandis que # et ## prévient les préfixes. Vous pouvez en savoir plus sur substitution de paramètre .

27
Andrea Corbellini