J'ai trouvé ceci dans un script Shell malveillant obscurci, commençant par:
${!#}${*^} <<<
...
Impossible de trouver une référence à ${!#}
, mais lorsque echo
'd, il affiche -bash
. S'agit-il d'un référent secret au shell en cours d'exécution? Pourquoi y a-t-il alors un tiret supplémentaire?
Merci!
Cette réponse est spécifique à bash
, car vous avez essayé echo
dans bash
. Tous les obus ne se comportent pas de la même manière.
Dans bash
, si $var1
est foo
, puis ${!var1}
est le même que $foo
. Le !
est expansion indirecte : il fait que bash
récupère de la variable donnée un nom de variable (foo
) au lieu d'une valeur .
Remplacez maintenant var1
avec #
. $#
est le nombre d'arguments. Si $#
est 0, ${!#}
est $0
. Si $#
est 4, ${!#}
est $4
. En d'autres termes, ${!#}
est le dernier paramètre positionnel, quel que soit le nombre de paramètres positionnels.
S'il n'y a pas de paramètres de position, $#
est 0
, donc le résultat est $0
, qui est le nom du shell ou du script ( référence ). Dans votre cas, c'était bash
(plus un en tête -
ce qui signifie qu'il s'agit d'un shell de connexion).
Test rapide:
$ echo ${!#}
-bash
$ set the quick brown fox
$ echo ${!#}
fox