Per quanto ho visto ci sono due modi per inizializzare una variabile con l'uscita di un processo. C'è qualche differenza tra questi due?Diversi modi per inizializzare una variabile
ex1=`echo 'hello world'`
ex2=$(echo 'hello world')
Per quanto ho visto ci sono due modi per inizializzare una variabile con l'uscita di un processo. C'è qualche differenza tra questi due?Diversi modi per inizializzare una variabile
ex1=`echo 'hello world'`
ex2=$(echo 'hello world')
Si ottiene lo stesso effetto.
Il $()
è consigliato poiché è più leggibile e rende più facile nidificare uno $()
in un altro $()
.
Aggiornamento:
La sintassi $()
è uno standard POSIX 1003.1 (edizione 2004). Tuttavia, su alcuni sistemi UNIX precedenti (SunOS, HP-UX, ecc.) Lo /bin/sh
non lo capisce.
Potrebbe essere necessario utilizzare backtick "`" invece o utilizzare un altro shell (di solito è ksh) se è necessario lo script di lavorare su tale ambiente.
Se non si sa quale sintassi da utilizzare - utilizzare $()
. La sintassi backtick è deprecata.
vedere http://mywiki.wooledge.org/BashFAQ/082
anche notare che $()
è POSIX quindi funziona su SH.
C'è un altro modo per inizializzare una variabile ad uno di default se non si è inizializzato da soli.
[jaypal:~/Temp] a="I have initialized var a"
[jaypal:~/Temp] echo ${a:="Default value"}
I have initialized var a
[jaypal:~/Temp] a=
[jaypal:~/Temp] echo ${a:="Default value"}
Default value
In modo che l'operatore legge il nuovo valore della variabile e restituisce il vecchio valore. :) –
Viene generalmente utilizzato quando si passano i valori allo script come '$ 1',' $ 2' e lo script viene eseguito anche quando tali valori non vengono passati esplicitamente. Con ciò è possibile impostare implicitamente le proprie variabili in modo che vengano eseguite sui valori predefiniti se non è stato loro assegnato un valore. Ciò consente di risparmiare circa 4-5 righe di codice dove si controlla se la variabile è stata assegnata o meno, qualcosa come 'if [-z" $ var "] allora; ... ' –
credo, possiamo o uso, echo $ {a: = "Valore predefinito"} o echo $ {a: - "Il valore di default"} – Indrajeet
@samus: $() è effettivamente POSIX (1003.2 Penso), ma non funzionerà su vecchi UNIX. Fidati di me - Li uso tutti i giorni. –
ma questo è il punto, quando parliamo di portabilità intendiamo POSIX perché è lo standard corrente supportato dalla maggior parte delle piattaforme, se si hanno requisiti specifici che vanno oltre questo, allora è un caso particolare. –
@samus: Con "più portabile" intendo "funziona su più sistemi operativi" non "è compatibile con i nuovi standard POSIX". –