Jak mohu použít: cat < < EOF [duplicate]

Tato otázka již má odpovědi zde :

Komentáře

  • V současné podobě skript vyžaduje nabídku " po Thanks, ukončit řetězec.
  • Díky Steveovi za zpětnou vazbu, ano, chyběly mi uvozovky. Můžete mi, prosím, trochu říct o cat < < doplňku EOF k mému skriptu?
  • << EOF věc se nazývá " zde dokument ". zde , zde a zde . ' Nejsem si jistý, co se ptáte na ty dva tucty řádků shell skriptu, takže k tomu nemohu ' komentovat.
  • Pokud ' hodláte lidi odkazovat na odkazy, nasměrujte je prosím na tento .

Odpověď

<< je heredoc. Cokoli, co následuje za <<, funguje jako oddělovač heredoc

cat <<EOF This is first line So, this is 2nd Again, another line EOF 

Enter

Takže pokud chcete uložit tři řádky do proměnné, postupujte takto:

z příkazového řádku

$ var="$(cat <<EOF > Bingo > Gotcha > Enough > EOF > )" 

Enter

$ echo "$var" #double quotes are important Bingo Gotcha Enough 

zevnitř skriptu

#!/bin/bash var="$(cat <<EOF Bingo Gotcha Enough EOF )" echo "$var" 

Komentáře

  • takže můžu dělat DU_RESULTS_HOME = " $ (cat < < EOF sudo -u hdfs hadoop fs -du -s / user / * | sort -r -k 1 -g | awk ' {suffix = " KMGT "; for (i = 0; $ 1 > 1024 & & i < délka (přípona); i ++) $ 1 / = 1024; tisk int ($ 1) substr (přípona, i, 1), 3 $; } ' | head -n 22 | awk ' {print $ 1 " \ t \ t \ t " $ 2} ') sudo -u hdfs hadoop fs -df -h / uživatel EOF) "
  • << je určen pro řetězce, jako jsem ' předvedl, nikoli příkazy. Chcete provést vysoké příkazy a uložit výsledky do DU_RESULTS_HOME?
  • ne, takže ve svém skriptu používám tolik proměnných, takže se snažím naučit se kočičí < < eof techniku ke snížení počtu proměnných .. a pravděpodobně se vyhnout používání formátu tisku, kterým je printf '% s \ n \ n \ n \ n% s \ n \ n% s \ n% s \ n \ n \ n \ n \ n% s \ n% s \ n % s ' " $ MESSAGE_BODY " " $ DF_RESULTS_HOME " " $ DU_RESULTS_HEADER_USER " " $ DU_RESULTS_HOME " | / bin / mail -s " $ MESSAGE_SUBJECT " -r " $ MESSAGE_SENDER " " $ MESSAGE_EMAIL "

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *