„STR: Nie znaleziono polecenia” podczas przypisywania wartości do zmiennej

9

Wprowadziłem następujące wiersze do skryptu powłoki o nazwie „test.sh”:

#!/bin/bash
echo Hello World
STR=”Hello Again
echo $STR

Po chmod do pliku wykonywalnego uruchomiłem skrypt ./test.sh. Jednak dostaję wiadomość

./test.sh: line 3  STR: Command not found

Co ja robię źle?

Jay Silver
źródło
1
Czy odpowiedź Terdona rozwiązała twoje pytanie? Jeśli nie, być może przypadkowo masz spacje wokół swojego przypisania zmiennej.
Arronical
@Voker to tylko stylistyczny komentarz oparty na mojej sugestii : Myślę, że najlepiej używać Blockquote do komunikatów o błędach zamiast Block code; na końcu nie jest to kod, ale jakiś tekst, który zwraca interpreter Bash.
fedorqui
@fedorqui dlaczego? Cytuje bloki nie zachować formatowanie, interpretują znaki specjalne (np *, _, #) jak obniżki i są różnie renderowane przez oprogramowanie czytnika ekranu. Uważam, że wszystko, co jest podane lub otrzymane przez komputer, powinno znajdować się w blokach kodu. Nigdy nie wiadomo, kiedy dokładny format może być odpowiedni. Zwłaszcza, gdy mamy do czynienia z takimi rzeczami, jak w przypadku Unicode.
terdon
@terdon to naprawdę zależy od przypadków i pojawia się nawet prośba o dodanie formatu dzienników / ostrzeżeń / komunikatów o błędach, który pozwala na zawijanie słów i zachowuje nowe wiersze . Dla mnie, jeśli jest to tylko taka linia, wolę cytowanie bloków, ponieważ ułatwia to zrozumienie, co jest kodem, a co błędem.
fedorqui
@fedorqui Chyba powinniśmy zabrać go do meta, ale zawsze wolę czcionki o stałej szerokości i dokładne odwzorowanie formatu za każdym razem, gdy publikujesz wiadomość, która jest czytana lub produkowana przez komputer.
terdon

Odpowiedzi:

20

Czego używasz do stworzenia tego skryptu? Znaki cudzysłowu, które masz w pytaniu, są nieprawidłowe. Nie są to zwykłe podwójne cudzysłowy ( "), ale . Regularne cytaty to:

$ uniprops '"' | head -1
U+0022 "› \N{QUOTATION MARK}

Podczas gdy twoje są:

$ uniprops '”' | head -1
U+201D ‹”› \N{RIGHT DOUBLE QUOTATION MARK}

Więc po prostu używaj regularnych cytatów i wszystko będzie dobrze:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well
terdon
źródło
Dzięki za odpowiedź Terdon. Podwójne cudzysłowy w pliku są poprawne, Post został wysłany z wiadomości e-mail.
Jay Silver
1
unipropsWygląda fajnie. Znalazłem stronę (czy to nasz własny tchrist?). Czy muszę go pobrać ze źródła, czy jest dostępny gdzieś w menedżerze pakietów? E: Unable to locate package uniprops
TRiG,
1
Nie używam Perla dużo (prawie wcale). Chcę tylko wiedzieć więcej niż minimum na temat Unicode.
TRiG,
1
@TRiG cóż, w Ubuntu jest to tak proste, jak sudo apt-get install cpanminus; sudo cpanm Unicode::Tusslei wtedy masz unipropspolecenie. Oczywiście tchrist napisał to cholerstwo, więc równie dobrze możesz go zapytać na czacie :)
terdon
1
Z żalem cały czas wpadam na tego rodzaju bzdury. Wygląda na to, że szczególny system wiki u mojego pracodawcy ma nieprzyjemny zwyczaj przekształcania łącznika -U + 002D na myślnik U + 2010 ( lub podobny ). Wtedy rzeczy takie jak uname ‐aprzestają działać: - /. Klienci poczty e-mail często mają podobne nikczemne nawyki - szczególnie podczas korzystania z formatowania HTML - kolejny dobry powód, aby preferować wiadomości e-mail w postaci zwykłego tekstu.
Cyfrowy uraz