Qu'est-ce que écho $ -1 affiche?

14

Qu'est-ce que la sortie echo $-1, echo $-2, echo $-3.. signifie?

Sur une de mes box Linux, cela me montre:

echo $-1
imsBEl1
echo $-2
imsBEl2

Et sur une autre box Linux, cela montre:

echo $-1
himBH1
echo $-2
himBH2

Correspondent-ils à certains emplacements de mémoire ou à autre chose?

iGnite007
la source
1
Le titre présente le problème suivant dans la barre latérale: meta.stackexchange.com/q/229363/205964
IQAndreas
J'ai ajouté une modification proposée qui a essayé de le corriger, mais j'ai vite réalisé que seule la barre latérale rend le MathJax, ce qui signifie que lorsque le titre est sur cette page, il obtient simplement des barres obliques inverses inutiles.
IQAndreas

Réponses:

19

POSIX a défini $ - comme:

-

(Trait d'union.) Se développe aux drapeaux d'options actuels (les noms d'options à lettre unique concaténés dans une chaîne) comme spécifié lors de l'appel, par la commande intégrée spéciale set, ou implicitement par le shell.

Cela $-peut donc être différent en fonction de votre shell ou de la façon dont vous l'invoquez.

1ou 2sont jetons séparés ici. Lorsque le shell voit unquote $, il identifiera le début de tout candidat pour l'expansion de paramètres, la substitution de commandes ou l'expansion arithmétique. Il l'a vu $-et élargi, laissant le reste inchangé.

Vous pouvez voir la section Reconnaissance des jetons pour plus de détails.

cuonglm
la source
18

echo $-affiche les options du shell courant (sans -préfixe). 1et 2sont des jetons supplémentaires non liés.

Miroslav Franc
la source
11

Pour compléter la réponse de Miroslav:

echo $-affiche les options du shell courant (sans -préfixe). 1 et 2 sont des jetons supplémentaires non liés.

Cela signifie que ce sont les options, pour chaque machine respectivement.

imsBEl
himBH

J'ai recherché la signification de chaque drapeau et compilé les significations ci-dessous, avec des paraphrases mineures.

-je

Si l'option -i est présente, le shell est interactif.

-m

Mode moniteur. Le contrôle des travaux est activé.

-B

Le shell effectue l'expansion de l'accolade ( voir Expansion de l' accolade ). C'est activé par défaut.

-s

Si l'option -s est présente ou s'il ne reste aucun argument après le traitement de l'option, les commandes sont lues à partir de l'entrée standard. Cette option permet de définir les paramètres positionnels lors de l'appel d'un shell interactif.

-E

errtrace

-l

Faire bash agir comme s'il avait été appelé en tant que shell de connexion

-h

hashall

-H Extension historique

Cette fonctionnalité est activée par défaut pour les shells interactifs.

Aaron Hall
la source
3

Pour développer les réponses existantes, essayez echo "${-1}"et echo "${-2}"- vous obtiendrez une erreur "Mauvaise substitution" car plutôt que d'utiliser -1comme nom de variable le trait d'union est utilisé pour remplacer une valeur si le nom de la variable avant n'est pas défini. Par exemple:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
l0b0
la source