GNU/Linux >> Znalost Linux >  >> Linux

Jak odložit variabilní expanzi?

Chtěl jsem inicializovat některé řetězce v horní části mého skriptu s proměnnými, které ještě nebyly nastaveny, jako například:

str1='I went to ${PLACE} and saw ${EVENT}'
str2='If you do ${ACTION} you will ${RESULT}'

a později na PLACE , EVENT , ACTION a RESULT bude nastaveno. Chci pak mít možnost vytisknout své řetězce s rozšířenými proměnnými. Je moje jediná možnost eval ? Zdá se, že to funguje:

eval "echo ${str1}"

je to standard? existuje lepší způsob, jak to udělat? Bylo by hezké nespouštět eval s ohledem na proměnné může být cokoliv.

Přijatá odpověď:

S typem vstupu, který zobrazíte, je jediným způsobem, jak využít expanzi shellu k nahrazení hodnot do řetězce, použít eval v nějaké formě. To je bezpečné, pokud ovládáte hodnotu str1 a může zajistit, že odkazuje pouze na proměnné, které jsou známé jako bezpečné (neobsahující důvěrná data) a neobsahují žádné další speciální znaky shellu neuvedené v uvozovkách. Řetězec byste měli rozbalit uvnitř dvojitých uvozovek nebo v dokumentu here, tak pouze "$` jsou speciální (musí jim předcházet v str1 ).

eval "substituted="$str1""

Bylo by mnohem robustnější definovat funkci namísto řetězce.

fill_template () {
  sentence1="I went to ${PLACE} and saw ${EVENT}"
  sentence2="If you do ${ACTION} you will ${RESULT}"
}

Nastavte proměnné a poté zavolejte funkci fill_template pro nastavení výstupních proměnných.

PLACE=Sydney; EVENT=fireworks
ACTION='not learn from history'; RESULT='have to relive history'
fill_template
echo "During my holidays, $sentence1."
echo "Cicero said: "$sentence2"."

Linux
  1. Jak přiřadit výstup příkazu Linux k proměnné

  2. Proměnné prostředí Linux:Jak číst a nastavovat na Linux VPS

  3. Expanze závorky Bash a proměnné?

  1. Jak nastavit proměnnou $Path v Linuxu

  2. Příklady exportních příkazů pro Linux (jak nastavit proměnné prostředí)

  3. Jak uložit příkaz do proměnné v shell skriptu?

  1. Jak provést nepřímé vyhodnocení proměnných?

  2. Jak získat datový typ proměnných v Zsh?

  3. Jak číst proměnné prostředí procesu