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?
${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 .