Wie ändere ich den Wert eines Arguments in einem Skript?

11

Ich habe das folgende kleine einfache Skript ausprobiert:

#!/bin/bash
$1="bar"
echo $1

Aber wenn ich laufe, ./script foobekomme ich eine Fehlermeldung und der Wert wird nicht geändert:

/home/mika/script: line 2: foo=bar: command not found
foo

Ich weiß, dass $ 1 das erste Argument ist, das Sie an Ihr Skript übergeben. Aber auch so möchte ich seinen Wert ändern.

user258266
quelle
Verwandte: stackoverflow.com/questions/4827690/…
Ciro Santilli 法轮功 病毒 审查 六四 事件 30

Antworten:

10

Sie können das eingebaute verwenden set:

#!/bin/bash
set -- "bar"
echo $1

Quelle und mehr über: Ändern Sie ein Befehlszeilenargument - bash .

Radu Rădeanu
quelle
Ich habe das versucht, aber es hallte immer noch "foo". Haben Sie unterschiedliche Ergebnisse erzielt? Stellen Sie sicher, dass Sie "foo" an das Skript übergeben.
Marty Fried
@MartyFried Ups, sorry ... Ich aktualisiere gerade meine Antwort.
Radu Rădeanu
Das funktioniert. :-) Gute Antwort ... Ich glaube, ich habe angenommen, dass er das nicht wollte, und ich bin mir nicht sicher, warum er das tun würde, aber Ihre Antwort ist tatsächlich korrekter als mein Vorschlag, es einfach nicht zu tun. Danke für den Link.
Marty Fried
4

Sie können diese Variablen nicht direkt ändern. Du könntest sagen:

x=$1
echo $x

Dann können Sie $xstattdessen verwenden

Mit $1=barwird der erste Parameter sofort ersetzt $1, und Sie geben im Wesentlichen an "foo=bar", und er wird als Befehl "foo" interpretiert, nicht als Variable "foo".

Marty Fried
quelle
Gute Idee, aber hängen Sie davon ab, was genau das OP leisten soll ... +1 von mir.
Radu Rădeanu
2

Verwenden Sie nicht die Verwendung $1für diese, in bashund andere Shells. Dies $1ist das erste Argument, das Sie an Ihr Skript übergeben:

#!/bin/bash
echo $1

Wenn Sie das obige als ausführen foo.sh hello, wird es gedruckt, helloda dies das erste Argument ist. Außerdem verweisen Sie auf eine Variable als varund auf den Inhalt einer Variablen als $var. Um das erwartete Verhalten zu erzielen, verwenden Sie einfach einen anderen Namen für Ihre Variable und kein $:

#!/bin/bash
var="bar"
echo $var
Terdon
quelle
Dieses kleine Skript war nur ein Beispiel, damit die Leute verstehen, was ich will. Ich weiß, dass $ 1 das erste Argument ist, das Sie an Ihr Skript übergeben. Aber auch so möchte ich seinen Wert ändern. Ich muss dies in einem anderen großen Skript anwenden. Danke.
user258266
@ user258266 nicht. Rufen Sie einfach das große Skript mit dem neuen Wert auf und verwenden Sie es nicht $1für Werte, die Sie ändern möchten. Wie auch immer, solange Sie den Syntaxfehler beheben, sollte es funktionieren. Ihr Hauptproblem war, dass Sie das verwendeten $.
Terdon
Aber ich brauche ... ich kann hier nicht erklären warum ... Vielleicht werde ich meine Frage bearbeiten.
user258266
@ user258266 bitte tun. Sie versuchen, eine Variable so einzustellen $foo="bar", dass sie foo="bar"ohne die nicht funktioniert $.
Terdon