Wypróbowałem następujący mały prosty skrypt:
#!/bin/bash
$1="bar"
echo $1
Ale kiedy uruchamiam, pojawia ./script foo
się błąd i wartość nie ulega zmianie:
/home/mika/script: line 2: foo=bar: command not found
foo
Wiem, że 1 $ to pierwszy argument, który przekazujesz skryptowi. Ale nawet tak chcę zmienić jego wartość.
command-line
bash
użytkownik258266
źródło
źródło
Odpowiedzi:
Możesz użyć wbudowanego
set
:Źródło i więcej na temat: Zmień argument wiersza poleceń - bash .
źródło
Nie możesz bezpośrednio zmienić tych zmiennych. Można powiedzieć:
Następnie możesz użyć
$x
zamiast tegoUżycie
$1=bar
natychmiast zastąpi pierwszy parametr$1
, a ty zasadniczo stwierdzasz"foo=bar"
, i jest on interpretowany jako polecenie „foo”, a nie zmienna „foo”;źródło
Nie używaj use
$1
dla tego, wbash
i innych powłokach,$1
jest pierwszym argumentem przekazywanym do skryptu:Jeśli uruchomisz powyższe jako
foo.sh hello
, zostanie wydrukowane,hello
ponieważ jest to pierwszy argument. Odwołujesz się również do zmiennej jakovar
i do zawartości zmiennej jako$var
. Aby uzyskać oczekiwane zachowanie, po prostu użyj innej nazwy dla swojej zmiennej i nie używaj$
:źródło
$1
wartości, które chcesz zmienić. W każdym razie, dopóki naprawisz błąd składniowy, powinien on działać, twoim głównym problemem było to, że korzystałeś z$
.$foo="bar"
, ponieważ to nie działa, potrzebujeszfoo="bar"
bez$
.