James ha ragione, ma per aggiungere altri dati, penso che il modo migliore di pensarci sia come argomenti al comando: intendi "ciao" e "mondo" come due argomenti o "ciao mondo" per essere uno discussione.
Inoltre, le virgolette consentono l'interpretazione di più di semplici variabili. Esattamente ciò che dipende dalla shell, ma controlla l'espansione della cronologia, l'espansione del controvento e l'espansione del nome file.
È anche importante notare che ci sono alcuni casi in cui è necessario utilizzare entrambi i tipi di virgolette in un singolo argomento. Ricorda che gli argomenti (di default) sono delimitati da spazi bianchi, quindi se non lasci alcuno spazio, stai ancora specificando lo stesso argomento.
Il meccanismo a virgoletta singola della maggior parte delle shell non consente caratteri speciali, il che significa che qualsiasi istanza di un'altra virgoletta singola, anche se sembra essere sfuggita, termina la citazione. È quindi impossibile passare una stringa con una virgoletta singola all'interno di una stringa a virgoletta singola e devi usare virgolette doppie. Questo può essere un dolore quando vuoi passare un argomento che contiene virgolette singole e qualcosa che dovrebbe essere interpretato, ma non vuoi esserlo. Ad esempio, se si desidera passare la stringa letterale "` `$ VAR 'è una variabile", è necessario farlo in questo modo:
"'"'$VAR'"' is a variable"
Questa è in realtà una concatenazione di tre stringhe con escape tra virgolette:
"'"
'$VAR'
"' is a variable"
oppure, con le virgolette rimosse:
'
$VAR
' is a variable
In realtà, con la maggior parte delle shell, puoi anche farlo in questo modo:
"'\$VAR' is a variable"
dove la barra rovesciata (" \
") dice alla shell di accettare letteralmente il seguente carattere e di non fare alcuna espansione su di esso.
Ma ci sono alcuni casi in cui finisci per farlo nel modo di concatenazione di più stringhe, non che in questo momento riesca a trovare un esempio.