GNU/Linux >> Linux Esercitazione >  >> Linux

Sintassi della dichiarazione di sostituzione dei comandi in Bash:quale di queste due è una pratica migliore??

Questa domanda ha già risposte qui :Qual è la differenza tra $(stuff) e `stuff`?

(6 risposte)
Chiuso 6 anni fa.

Questo fa parte di un bash find loop, e mi sono chiesto quale sia la sintassi più corretta e perché?

filename="$(echo "$i" | cut -c5-)";
filename=`echo "$i" | cut -c5-`;

Entrambi funzionano allo scopo di ottenere il nome del file.

Risposta accettata:

Il manuale di Bash rileva che:

Viene implementata la forma POSIX $() di sostituzione dei comandi (vedi Sostituzione dei comandi) e preferita alla shell Bourne " (che è implementata anche per la compatibilità con le versioni precedenti).

Quindi $(...) è preferito a `...` in qualcosa di nuovo e specifico di Bash che stai scrivendo¹. La sostituzione del backtick non si annida bene (devi evitarli) e ha un comportamento di citazione leggermente strano. Puoi annidare $(... $(...) ...) arbitrariamente molto senza problemi. Il manuale descrive il comportamento dei due come:

Quando viene utilizzata la forma di sostituzione del backquote vecchio stile, la barra rovesciata mantiene il suo significato letterale tranne quando è seguito da "$", "`" o "". Il primo backquote non preceduto da una barra rovesciata termina la sostituzione del comando. Quando si utilizza il modulo $(comando), tutti i caratteri tra parentesi costituiscono il comando; nessuno viene trattato in modo speciale.

Di solito è considerata una buona pratica citare tutte le espansioni delle stringhe per evitare problemi di divisione delle parole, anche in punti in cui non è strettamente richiesto, quindi "$(...)" è anche una pratica migliore qui.

Infine, due parti rilevanti da quella stessa pagina wooledge:

  • È ora che ti dimentichi di `...` . Non è coerente con la sintassi di Expansion ed è terribilmente difficile da annidare senza una dose di antidolorifici. Usa $(...) invece.
  • E per carità, "Usa più virgolette!" Proteggi le tue stringhe e le espansioni dei parametri dalla divisione delle parole. La divisione delle parole mangerà i tuoi bambini se non citi le cose correttamente.

¹In realtà, anche in POSIX sh script, questi sono considerati best practice. Ci sono ancora proiettili più deboli in giro, ma saprai se li incontrerai.


Linux
  1. Quale terminale è migliore:Bash vs Zsh

  2. Citando entro $(sostituzione comando) in Bash?

  3. Sostituzione dei comandi usando “?

  4. comando di esportazione bash

  5. Codice di uscita dall'assegnazione della variabile alla sostituzione dei comandi in Bash

Bash Heredoc

Linux quale comando

Comando sorgente Bash

Comando della cronologia in Linux (Cronologia di Bash)

Comando Bash printf

Script Bash(II)