GNU/Linux >> Znalost Linux >  >> Linux

Syntaxe deklarace substituce příkazů v Bash – která z těchto dvou je lepší praxe?

Tato otázka zde již obsahuje odpovědi :Jaký je rozdíl mezi $(stuff) a `stuff`?

(6 odpovědí)
Uzavřeno před 6 lety.

Toto je část bash find smyčky a přemýšlel jsem, která syntaxe je správnější a proč?

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

Oba fungují za účelem získání názvu souboru.

Přijatá odpověď:

Manuál Bash uvádí, že:

POSIX $() forma substituce příkazů je implementována (viz Command Substitution) a upřednostňována před bourneovským shellem “ (který je také implementován pro zpětnou kompatibilitu).

Takže $(...) má přednost před `...` v čemkoli novém a specifickém pro Bash, co píšete¹. Substituce backtick se špatně ukládá (musíte jim uniknout) a má trochu zvláštní chování při citování. Můžete vnořit $(... $(...) ...) libovolně hodně bez problémů. Manuál popisuje chování těchto dvou jako:

Když se použije substituce ve starém stylu zpětné uvozovky, zpětné lomítko si zachová svůj doslovný význam, kromě případů, kdy následuje ‚$‘, ‚‘‘ nebo ‚‘. První zpětná uvozovka, před kterou není zpětné lomítko, ukončuje substituci příkazu. Při použití formuláře $(command) tvoří příkaz všechny znaky v závorkách; s žádnými se nezachází speciálně.

Obvykle se považuje za osvědčený postup citovat všechna rozšíření řetězců, aby se předešlo problémům s dělením slov, a to i na místech, kde to není striktně vyžadováno, takže "$(...)" je zde také lepší praxe.

Nakonec dvě relevantní části ze stejné vlněné stránky:

  • Je také čas, abyste zapomněli na `...` . Není v souladu se syntaxí Expanze a je strašně těžké se usadit bez dávky léků proti bolesti. Použijte $(...) místo toho.
  • A proboha:„Používejte více uvozovek!“ Chraňte své řetězce a rozšíření parametrů před dělením slov. Dělení slov sežere vaše děti, pokud nebudete věci správně citovat.

¹Vlastně i v POSIX sh skripty, jsou považovány za nejlepší praxi. V okolí jsou stále slabší skořápky, ale budete vědět, jestli na ně narazíte.


Linux
  1. Který terminál je lepší:Bash vs Zsh

  2. Citace v rámci $(příkazová substituce) v Bash?

  3. Výstupní kód přiřazení proměnné k substituci příkazu v Bash

  1. Dvě skvělá použití pro příkaz cp:Bash zkratky

  2. Syntaxe tohoto Shell/bash:Somevariable=somevalue Somecommand?

  3. Náhrada příkazů pomocí „?

  1. Který Bash se provádí?

  2. příkaz pro export bash

  3. Spusťte příkaz bash na jenkins pipeline