2010-12-11 16 views
28

Quando si digitano le variabili in Bash, qual è la differenza tra declare e typeset? Se utilizzato all'interno di una funzione: qual è la differenza tra declare e typeset e local?Differenze tra dichiarazione, tipo e variabile locale in Bash

L'unica differenza che ho riscontrato è che la composizione è portatile per gli script ksh. Oltre a questo, ci sono motivi per cui uno dovrebbe essere preferito rispetto all'altro?

AGGIORNAMENTO: Aggiunto local alla domanda.

+0

simile a [questa domanda] (http://stackoverflow.com/q/30362831/471376). – JamesThomasMoon1979

risposta

8

Per quanto riguarda bash, no, non c'è differenza. In effetti, la pagina di manuale ha condivide la stessa definizione

dichiarare [-aAfFilrtux] [-p] [nome [= valore] ...]
comporre [-aAfFilrtux] [-p] [nome [= valore] ...]
Dichiarare le variabili e/o assegnare loro gli attributi. Se nessun nome è dato poi visualizzare i valori delle variabili . L'opzione -p visualizzerà gli attributi ei valori di ogni nome ...

Ho anche trovato this little tidbit che ne dimostrano ulteriormente la mia affermazione così come la portabilità ksh lei ha citato.

Il builtin declare o composte, che sono sinonimi esatti, consentono di modificare le proprietà delle variabili. Questa è una forma molto debole della digitazione [1] disponibile in alcune lingue di programmazione . Il comando di dichiarazione è specifico per la versione 2 o successiva di Bash. Il comando typeset funziona anche con lo in script ksh.

+8

"help typeset" mi dice che è obsoleto. Obsoleto in favore di "dichiarare". – lecodesportif

+0

questo è un buon esempio dei problemi nella documentazione di bash e c'è incoerenza con la guida della riga di comando (usando il comando 'help') e le pagine di manuale, (usando 'man bash' e andando a SHELL BUILTINS) e la pagina integrata (usando 'man builtins'). Ci sono anche alcuni errori di battitura, quindi fai attenzione. – osirisgothra

3

Nel manuale Bash ai sensi della sezione 4.2 Bash Builtin Commands si afferma:

'comporre'
veste tipografica [-afFrxi] [-p] [NAME [= valore] ...]
Il ' il comando typeset è fornito per compatibilità con la shell Korn ; tuttavia, è stato deprecato in favore del comando incorporato 'declare' .

15
  • Differenza tra typeset e declare:

Il primo è più portabile (per esempio ksh.), Mentre il secondo è più preferibile quando la portabilità non è una preoccupazione.

  • Differenza tra declare (o typeset) e local quando utilizzato all'interno di una funzione:

Il primo implica quest'ultimo, ma più potente. Ad esempio, declare -i x rende x avranno l'attributo integer, declare -r x rende x sola lettura, ecc

+12

'local' e' declare' sono per lo più identici e accettano tutti gli stessi argomenti con due eccezioni: locale fallirà se non usato all'interno di una funzione, e locale senza alcun filtro di argomenti in uscita stampare solo locali, dichiarare no. – ormaaj

+0

@ormaaj hai ragione, non mi rendevo conto che 'local' supporta anche le opzioni. Molte grazie. –