Ist es möglich, die Variable $ 1 zu deaktivieren? Wenn nicht, kann ich nicht herausfinden, wo es erklärt wird man
.
[root@centos2 ~]# set bon jour
[root@centos2 ~]# echo $1$2
bonjour
[root@centos2 ~]# unset $1
[root@centos2 ~]# echo $1$2
bonjour
[root@centos2 ~]#
BEARBEITEN:
man set option double-dash
Schließlich habe ich in man ( ) Folgendes herausgefunden, um alle Positionsparameter zu leeren (und der Mann hat das Wort "unset" verwendet!):
Wenn dieser Option keine Argumente folgen, werden die Positionsparameter nicht festgelegt.
[root@centos2 ~]# echo $1
[root@centos2 ~]# set bon jour
[root@centos2 ~]# echo $1$2
bonjour
[root@centos2 ~]# set --
[root@centos2 ~]# echo $1$2
[root@centos2 ~]#
Die Antwort von @Jeff Schaller hat mir geholfen, das zu verstehen.
Antworten:
Sie können es nicht deaktivieren, aber Sie können wechseln
$2
in$1
:shift
verschiebt alle Positionsparameter einen Schritt tiefer. Es ist üblich, dass z. B. Befehlszeilen-Parsing-Schleifen (die / nicht verwenden ) die Positionsparameter in jeder Iteration verschieben, während der Wert von wiederholt untersucht wird . Es ist ungewöhnlich, einen Positionsparameter deaktivieren zu wollen.getopt
getopts
$1
By the way,
unset
nimmt einen variablen Namen , nicht seinen Wert, sounset $1
wird in der Tat ungesetzt die Variablebon
(hatte es zuvor eingestellt worden ist ).quelle
unset bon
. Daran habe ich nicht gedacht.set
funktioniert. Ich habe dieses Beispiel mit "bonjour" versucht, konnte aber keinen Weg finden, diese Variable zu leeren. Ich habe ein bisschen mit Unset gemischt. Wahrscheinlich, weil ich noch nicht das ganze Konzept über Set, Unset, Env, Export usw. bekommen habegetopt
odergetopts
Sie tun Verwendungshift
.Sie können es leeren , indem Sie die Parameter auf "die leere Zeichenfolge" zurücksetzen, gefolgt von "den Parametern, beginnend mit der zweiten":
quelle
Neben all den richtigen technischen Antworten sollten Sie feststellen, dass Ihre Frage einen logischen Fehler enthält. $ 1, $ 2, ... sind nicht die Werte benannter Variablen wie $ A, $ B, ..., sondern der 1., 2., ... Wert einer Werteliste. Vielleicht ist der erste Wert einer Liste eine leere Zeichenfolge, aber es ist nicht sinnvoll zu sagen, dass meine Liste keinen ersten Wert hat. Wenn eine Liste keinen ersten Wert hat, hat sie überhaupt keinen Wert und ist daher eine leere Liste.
Sie können also den ersten Wert einer Liste nicht "deaktivieren". Sie können nur den ersten Wert aus einer Liste entfernen. Dann ist der frühere 2. Wert der Liste jetzt der 1. Wert der Liste, der frühere 3. Wert ist jetzt der 2. und so weiter. Genau das macht der Schichtführer.
quelle
unset A; A[4]=foo; A[7]=bar;
und Urlaub mitA[0]
unter anderem ungesetzt (nicht nur leer). Und dannunset A[4]
. Aber ich schweife ab, das gilt nicht für die Positionsparameter.Nein, zumindest nicht direkt. Diese Syntax sollte funktionieren, führt jedoch zu einem Fehler:
unset $variable
ist in der Regel ein Fehler undunset variable
war das, was beabsichtigt war. Leider funktioniert es hier nicht.quelle