Qualche motivo per usare o insegnare la sostituzione ... per un nuovo sviluppo?


16

Comprendo che la $(...)sintassi di sostituzione dei comandi più moderna è preferita rispetto alla `sintassi precedente, a causa della nidificazione più facile e meno soggetta a errori e della sintassi di escape.

Inoltre, sembra che la maggior parte delle /bin/shshell in stile moderno supporti $(…):

  • bash
  • ash (e quindi BusyBox, quindi la maggior parte di Linux incorporato)
  • trattino
  • FreeBSD / bin / sh

Ed $(…)è specificato da IEEE 1003.1.

Quindi ho 2 domande molto correlate:

  • C'è qualche motivo per usare `nel nuovo sviluppo di script di shell se non si conosce un vecchio sistema specifico su cui lo script dovrà essere eseguito?
  • C'è qualche motivo per non insegnare agli studenti di programmazione UNIX solo a scrivere $(...)e discutere `solo come una variante obsoleta che probabilmente incontreranno se stanno leggendo gli script della shell di altri sviluppatori (e potrebbero aver bisogno se stanno lavorando con un sistema molto vecchio o non standard per qualche ragione)?

7
No, non ha senso usare o insegnare `...`. È lì solo per la portabilità all'indietro con la shell Bourne (come la shell Bourne aveva ^(lo stesso |) per la portabilità all'indietro con la shell Thomson). Nota comunque che (t)cshnon ce l'hanno $(...)(ma non ha molto senso usarli o insegnarli).
Stéphane Chazelas,

2
È una cosa di Groucho Marx `; {)
goldilocks,

2
Aspetta, i backtick sono deprecati ?? Qualcuno ha un riferimento canonico che spiega perché? (I caratteri di sintassi strani sono molto difficili da cercare.)
MathematicalOrchid

1
Più facile da scrivere. `` - 2 tasti premuti; $()- MAIUSC + 4,9, MAIUSC + 0 - 5 tasti premuti;
Vi.

3
@MathematicalOrchid stackoverflow.com/questions/9405478/... sembra piuttosto buona. I backtick sono molto difficili da annidare correttamente, specialmente quando sono coinvolte ulteriori quotazioni.
Michael Ekstrand,

Risposte:


19

Poiché vengono spesso utilizzate le zecche posteriori, ha senso insegnare questo costrutto sintattico.

Naturalmente, la $()sostituzione dei comandi di stile dovrebbe essere enfatizzata come stile predefinito (e costrutto conforme standard).

Perché le zecche sono ancora popolari? Perché salvano un personaggio nella digitazione e sono probabilmente meno pesanti alla vista.


18
Non
definirei

1
Normalmente utilizzo i backstick in casi semplici e $ () in casi complessi. Ma finora molti script usano i backstick e i laureati dovevano essere in grado di mirare con loro.
Peter - Ripristina Monica il

@jasonwryan In quel caso il bug non è dovuto alla brevità, ma a problemi arbitrari. Vale a dire, usare i backtick è più facile alla vista, ma non è per questo che è ammortizzato. A meno che tu non stia cercando di dire che lo zucchero è per definizione cattivo e dovremmo tutti preferire asm per qualsiasi cosa ... In realtà mi piace l'aspetto $()migliore, ma i backtick sono più facili e più KISS; potrebbe essere conseguenza OCDish pavloviana della programmazione generale.
Riccioli d'oro

@goldilocks una volta invecchiato, la leggibilità è comunque molto più difficile: i backtick sono praticamente invisibili nel mio codice alla mia età ...
jasonwryan

3
Su una tastiera francese, per esempio, `è Altrg + E, (scomodo per tipo), mentre $, (, )non è necessario alcun modificatore.
Stéphane Chazelas,

5

Non li userei per programmare e insegnare l'uso della sostituzione di backtick negli script di shell come obsoleto va bene (questo sembra essere il consenso). Non penso che siano intrinsecamente malvagi, e (almeno a giudicare dal tuo tutorial medio alla riga di comando di Linux) sono ancora frequentemente utilizzati in semplici frammenti / righe in cui probabilmente non saranno nidificati e cose che lo farai solo una volta.

Vedi Sostituzione del comando: simboli o simboli di simboli / simboli racchiusi? .


1

Evito di usare il $()costrutto perché non è portatile - nel mondo reale. Hai elencato quattro conchiglie: ci sono molte più variazioni rispetto a quelle in giro (un ordine di grandezza?). Prova a eseguire lo script in Solaris / bin / sh e guarda come procedi.

D'altra parte, quando smetti di supportare i vecchi sistemi? non puoi mai progredire verso nuovi modi di fare le cose? Suppongo che dovresti fidarti del tuo stesso giudizio, e se riesci a vedere un netto vantaggio della nuova via rispetto alla vecchia, allora provaci ... questo non è uno di loro (personalmente trovo le chiacchiere molto più chiare - non possono essere confuso con la sostituzione della variabile shell, che è una cosa diversa)


1
POSIX non specifica che /bin/shdeve essere conforme. Solaris /bin/shè davvero molto non conforme, sebbene Solaris 9/10 / ... sia ufficialmente conforme a POSIX. L' $()è solo un costrutto che non capisce. Ma ce ne sono molti altri che non capisce o sono interpretati in modo diverso. Il modo portatile per ottenere un conforme shper cercarlo nel percorso restituito da getconf PATH.
maxschlepzig,
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.