Ho visto questo commento molte volte su Unix e Linux così come su altri siti che usano la frase "i backtick sono stati deprecati", rispetto a shell come Bash e Zsh.
Questa affermazione è vera o falsa?
Risposta accettata:
Esistono due diversi significati di "obsoleto".
essere ritirato: (principalmente di una funzionalità software) essere utilizzabile ma considerato obsoleto ed è meglio evitarlo, in genere perché è stato sostituito.
—Nuovo dizionario americano di Oxford
Con questa definizione i backtick sono deprecato.
Lo stato obsoleto può anche indica che la funzione verrà rimossa in futuro.
—Wikipedia
In base a questa definizione, i backtick non deprecato.
Ancora supportato:
Citando la specifica Open Group sui linguaggi di comando della shell,
in particolare la sezione "2.6.3 Sostituzione dei comandi", si può vedere che entrambe le forme di sostituzione dei comandi, i backtick (`..cmd..`
) o parentesi in dollari ($(..cmd..)
) sono ancora supportati per quanto riguarda le specifiche.
estratto
La sostituzione del comando consente di sostituire l'output di un comando al posto
del nome del comando stesso. La sostituzione del comando avviene quando il comando
è racchiuso come segue:
$(command)
or (backquoted version):
`command`
La shell espanderà la sostituzione del comando eseguendo il comando in un ambiente di sottoshell
(vedi Ambiente di esecuzione della shell) e sostituendo la sostituzione del comando
(il testo del comando più il $()
o
backquotes) con lo standard output del comando, rimuovendo le sequenze di uno
o più caratteri
possono essere trattati come delimitatori di campo ed eliminati durante la suddivisione dei campi,
a seconda del valore di IFS e delle virgolette in vigore. Se l'output
contiene byte null, il comportamento non è specificato.
All'interno dello stile backquoted di sostituzione dei comandi,
il suo significato letterale, tranne quando seguito da:'$', '`
', o
ricerca della quotazione precedente corrispondente deve essere soddisfatta dalla prima quotazione precedente non quotata
senza escape; durante questa ricerca, se viene rilevato un backquote senza escape
all'interno di un commento della shell, un here-document, un comando incorporato
sostituzione del $(comando)
form o una stringa tra virgolette, si verificano risultati non definiti
. Una stringa tra virgolette singole o doppie che inizia, ma non finisce,
all'interno di "`...`
” la sequenza produce risultati indefiniti.
Con il $(comando)
modulo, tutti i caratteri che seguono la parentesi aperta alla
la parentesi chiusa corrispondente costituiscono il comando. Qualsiasi script di shell
valido può essere utilizzato per i comandi, ad eccezione di uno script costituito esclusivamente da
reindirizzamenti che producono risultati non specificati.
Allora perché tutti dicono che i backtick sono stati deprecati?
Perché la maggior parte dei casi d'uso dovrebbe utilizzare il modulo dei genitori del dollaro invece dei backtick. (Deprecato nel primo senso sopra.) Molti dei siti più rinomati (incluso U&L) spesso affermano anche questo, in tutto, quindi è un buon consiglio. Questo consiglio non deve essere confuso con un piano inesistente per rimuovere il supporto per i backtick dalle shell.
-
BashFAQ #082 – Perché $(…) è preferito a `…` (backtick)?
estratto
`...`
è la sintassi legacy richiesta solo dalle bourne shell più vecchie di
non compatibili con POSIX. Ci sono diversi motivi per
preferire sempre$(...)
sintassi:…
-
Bash Hackers Wiki:sintassi obsoleta e deprecata
estratto
Questa è la vecchia forma compatibile con Bourne della sostituzione del comando.
Entrambi i`COMMANDS`
e$(COMANDI)
le sintassi sono specificate da POSIX,
ma quest'ultimo è ottimo preferito, sebbene il primo sia purtroppo
ancora molto diffuso negli script. Le sostituzioni dei comandi di nuovo stile sono ampiamente
implementate da ogni shell moderna (e poi da alcune). L'unico motivo per utilizzare
i backtick è la compatibilità con una vera shell Bourne (come Heirloom).
Le sostituzioni dei comandi backtick richiedono un escape speciale quando nidificate e
gli esempi trovati in natura sono citati in modo improprio altro spesso. Vedi:Perché $(…) è preferito a `…` (backtick)?. -
Motivazione standard POSIX
estratto
A causa di questi comportamenti incoerenti, la varietà di sostituzioni di comandi con virgolette non è consigliata per le nuove applicazioni che annidano sostituzioni di comandi o tentano di incorporare script complessi.
NOTA: Questo terzo estratto (sopra) mostra diverse situazioni in cui i backtick semplicemente non funzionano, ma il nuovo metodo delle parentesi in dollari funziona, a cominciare dal paragrafo seguente:
Inoltre, la sintassi con virgolette ha restrizioni storiche sul contenuto del comando incorporato. Mentre il modulo "$()" più recente può elaborare qualsiasi tipo di script incorporato valido, il modulo con virgolette non può gestire alcuni script validi che includono virgolette.
Se continui a leggere quella sezione, gli errori vengono evidenziati mostrando come fallirebbero usando i backtick, ma funzionano usando la più recente notazione di parentesi del dollaro.
Correlati:come posizionare la mano per premere i tasti Comando (cmd) + Opzione (alt)?Conclusioni
Quindi è preferibile utilizzare le parentesi in dollari anziché i backtick, ma in realtà non stai utilizzando qualcosa che è stato tecnicamente "deprecato" come in "questo smetterà di funzionare completamente a un certo punto".
Dopo aver letto tutto questo, dovresti sapere che sei fortemente incoraggiato a usare le parentesi in dollari a meno che tu non specificamente richiedono la compatibilità con una vera shell Bourne originale non POSIX.