web-dev-qa-db-fra.com

Quelle est la signification de $ {0% / *} dans un script bash?

J'essaie de comprendre un script de test, qui comprend le segment suivant:

SCRIPT_PATH=${0%/*}
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then 
    cd $SCRIPT_PATH
fi

Que fait le ${0%/*} représenter? Merci

59
user785099

On l'appelle Parameter Expansion . Jetez un œil à cette page et au reste du site.

Quelle ${0%/*} le fait, il développe la valeur contenue dans l'argument 0 (qui est le chemin qui a appelé le script) après avoir supprimé la chaîne /* suffixe à la fin de celui-ci.

Donc, $0 est le même que ${0} qui est comme tout autre argument, par exemple. $1 que vous pouvez écrire comme ${1}. Comme j'ai dit $0 est spécial, car ce n'est pas un argument réel , il est toujours là et représente le nom du script. L'extension des paramètres fonctionne dans le {} - accolades et % est un type d'extension de paramètres.

%/* correspond à la dernière occurrence de / et supprime tout (* signifie n'importe quoi) après ce caractère. Jetez un œil à cet exemple simple:

$ var="foo/bar/baz"
$ echo "$var"
foo/bar/baz
$ echo "${var}"
foo/bar/baz
$ echo "${var%/*}"
foo/bar
90
c00kiemon5ter