Utilizzo di backtick o dollaro negli script shell


9

Sono impegnato a scrivere script di shell (usando Bash) dove ho bisogno di popolare alcune variabili dal risultato restituito di altri comandi.

Quindi sto usando una sintassi come questa:

VAR=`command 2>/dev/null`

Ma quando cercavo informazioni sulle shell di script, ho scoperto spesso che quanto sopra può essere ottenuto usando anche la seguente sintassi:

VAR=$(command 2>/dev/null)

Entrambi funzionano per me (ho ricevuto il risultato atteso in entrambi i casi) e quindi mi chiedo se posso ancora utilizzare entrambi i moduli in modo intercambiabile o se devo attenermi a un modulo per essere sicuro di essere conforme all'evoluzione futura di conchiglia ?



I collegamenti di belacqua offrono molte informazioni sulle differenze e sull'uso. Chiusura poiché non è correlato a un problema di Ubuntu, ma più di uno di programmazione. Consiglio vivamente di seguire i link sopra menzionati.
Luis Alvarado,

Risposte:


13

Usa il dollaro. I backtick sono semi-deprecati , perché sono più complicati da usare (vedi il link) e non ci sono vantaggi a meno che tu non stia eseguendo il golf del codice e non sia assolutamente necessario salvare un singolo carattere. Tuttavia, probabilmente non verranno rimossi dalle shell popolari presto, quindi per ora sei al sicuro.


3

Attenersi alla notazione con il simbolo del dollaro $()ogni volta che è possibile. I backtick diventano ingombranti / confusi quando si inizia a dover fare quotazioni nidificate. Ex:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

Sostituendo i backtick con si $()ottiene lo stesso output ed è più facile da leggere (meno distinzioni di angoli di variazione da discernere):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

Questo e ogni virgoletta (virgoletta singola, virgoletta doppia, backtick) significa qualcosa di diverso nella shell, quindi l'uso di $ può aiutare a rimuovere un livello di complessità. E lo sviluppatore che ti segue ti ringrazierà, perché sarà più facile capire cosa hai fatto.


I backtick non possono nemmeno essere nidificati in modo funzionale.
Bernhard,

@ Bernardo Il mio esempio mostra ciò che avevo in mente con quella frase.
Aaron,
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.