"STR: comando non trovato" durante l'assegnazione di un valore a una variabile


9

Ho inserito le seguenti righe in uno script della shell chiamato "test.sh":

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

Dopo chmod all'eseguibile, ho eseguito lo script con ./test.sh. Tuttavia, ricevo il messaggio

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

Che cosa sto facendo di sbagliato?


1
La risposta di Terdon ha risolto la tua domanda? Altrimenti potrebbe essere che tu abbia accidentalmente spazi attorno alla tua assegnazione variabile.
Arronical,

@Voker solo un commento stilistico basato sul mio suggerimento : penso che sia meglio usare Blockquote per i messaggi di errore invece del blocco di codice; alla fine, non si tratta di un codice ma di un testo restituito dall'interprete Bash.
fedorqui,

@fedorqui perché? I blocchi di virgolette non mantengono la formattazione, interpretano caratteri speciali (ad es *. _, #) Come markdown e sono resi in modo diverso dal software dello screen reader. Penso che tutto ciò che viene dato o ricevuto da un computer dovrebbe essere in blocchi di codice. Non si sa mai quando il formato esatto può essere rilevante. Soprattutto quando si tratta di cose come questa in cui entra in gioco Unicode.
terdon,

@terdon dipende molto dai casi e c'è persino una richiesta di aggiungere formato per registri / avvertimenti / messaggi di errore che consente di racchiudere le parole e preservare le nuove righe . Per me, se è solo una riga come questo caso, preferisco i blocchi di virgolette poiché semplifica la comprensione del codice e degli errori.
fedorqui,

@fedorqui Immagino che dovremmo portarlo a meta, ma preferisco sempre la riproduzione di caratteri a larghezza fissa e la riproduzione esatta del formato quando invio un messaggio che viene letto o prodotto da un computer.
terdon,

Risposte:


20

Cosa stai usando per creare quello script? I caratteri di citazione che hai nella tua domanda sono sbagliati. Non sono doppie virgolette regolari ( ") ma . Le virgolette regolari sono:

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

Mentre i tuoi sono:

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

Quindi, basta usare le virgolette regolari e andrà tutto bene:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well

Grazie per la risposta Terdon. Le doppie virgolette nel file sono corrette, il post proveniva da un'email.
Jay Silver,

1
unipropssembra fico. Ho trovato la pagina (è il nostro tchrist?). Devo scaricarlo dalla fonte o è disponibile in un gestore di pacchetti da qualche parte? E: Unable to locate package uniprops
TRiG,

1
Non uso molto il Perl (a malapena). Voglio solo sapere più del minimo su Unicode.
TRiG

1
@TRiG bene, in Ubuntu è semplice come sudo apt-get install cpanminus; sudo cpanm Unicode::Tusslee poi hai il unipropscomando. Certo, Tchrist ha scritto quella dannata cosa, quindi puoi anche chiederglielo in chat :)
Terdon,

1
Mi rammarico sempre di incontrare questo tipo di assurdità. Un particolare sistema wiki presso il mio datore di lavoro sembra avere la brutta abitudine di tradurre trattino -U + 002D in trattino U + 2010 ( o simile ). Quindi cose come uname ‐asmettere di funzionare: - /. I client di posta elettronica hanno spesso abitudini nefaste simili, soprattutto quando si utilizza la formattazione HTML, un altro buon motivo per preferire le e-mail in testo semplice.
Trauma digitale
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.