Mam ten skrypt o nazwie test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
kiedy biegam sh test.sh
, dostaję to:
test.sh: line 2: STR: command not found
Co ja robię źle? Patrzę na bardzo podstawowe / dla początkujących tutoriale skryptów bash online i tak mówią o deklarowaniu zmiennych ... Więc nie jestem pewien, co robię źle.
Jestem na Ubuntu Server 9.10. I tak, bash znajduje się w /bin/bash
.
#!/usr/bin/env bash
zamiast wstawiać bezpośrednio,#!/bin/bash
chyba że masz absolutną pewność, że jesteśbash
w związku/bin
z tą odpowiedzią: stackoverflow.com/a/21613044/3589567Odpowiedzi:
Nie możesz mieć spacji wokół znaku „=”.
Kiedy piszesz:
bash próbuje uruchomić polecenie o nazwie STR z 2 argumentami (ciągi „=” i „foo”)
Kiedy piszesz:
bash próbuje uruchomić polecenie o nazwie STR z 1 argumentem (ciąg „= foo”)
Kiedy piszesz:
bash próbuje uruchomić polecenie foo z STR ustawionym na pusty ciąg znaków w swoim środowisku.
Nie jestem pewien, czy to pomaga wyjaśnić, czy jest to zwykłe zaciemnianie, ale pamiętaj, że:
STR "=" "foo"
,STR "=foo"
,STR="" foo
.Odpowiednia sekcja specyfikacji języka sh, sekcja 2.9.1, stanowi:
W tym kontekście a
word
to polecenie, które uruchomi bash. Każdy ciąg zawierający=
(w dowolnej pozycji innej niż na początku ciągu), który nie jest przekierowaniem, jest przypisaniem zmiennej, natomiast każdy ciąg, który nie jest przekierowaniem i nie zawiera,=
jest poleceniem. WSTR = "foo"
,STR
nie jest zmienną przyporządkowanie.źródło
FOO-BAR=qux
nie jest przypisaniem zmiennej, ponieważFOO-BAR
nie jest prawidłową nazwą.Upuść spacje wokół
=
znaku:źródło
set foo = bar
częsty błąd w plikach wsadowych systemu Windows - i tam wyśmiewa go język wsadowy ;-)W trybie interaktywnym wszystko wygląda dobrze:
Oczywiście (!), Jak powiedział Johannes, nie ma miejsca wokół
=
. Jeśli wokół jest jakaś przestrzeń,=
wówczas w trybie interaktywnym wyświetla błędy jakoźródło
STR = "Hello World"
, więc ta odpowiedź nie ma tutaj zastosowania.$
znakiemWiem, że na to pytanie udzielono odpowiedzi bardzo wysokiej jakości. Krótko mówiąc, nie możesz mieć spacji.
Nie działał z powodu odstępów wokół znaku równości. Gdybyś miał biec ...
To by działało
źródło
Kiedy definiujesz dowolną zmienną, nie musisz wstawiać żadnych dodatkowych spacji.
Na przykład
Więc usuń spacje:
i będzie dobrze działać.
źródło