Ich habe das folgende kleine einfache Skript ausprobiert:
#!/bin/bash
$1="bar"
echo $1
Aber wenn ich laufe, ./script foo
bekomme 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.
command-line
bash
user258266
quelle
quelle
Antworten:
Sie können das eingebaute verwenden
set
:Quelle und mehr über: Ändern Sie ein Befehlszeilenargument - bash .
quelle
Sie können diese Variablen nicht direkt ändern. Du könntest sagen:
Dann können Sie
$x
stattdessen verwendenMit
$1=bar
wird 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".quelle
Verwenden Sie nicht die Verwendung
$1
für diese, inbash
und andere Shells. Dies$1
ist das erste Argument, das Sie an Ihr Skript übergeben:Wenn Sie das obige als ausführen
foo.sh hello
, wird es gedruckt,hello
da dies das erste Argument ist. Außerdem verweisen Sie auf eine Variable alsvar
und 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$
:quelle
$1
fü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$
.$foo="bar"
, dass siefoo="bar"
ohne die nicht funktioniert$
.