Cette question a déjà des réponses ici :
Commentaires
Réponse
Le <<
est lhérédoc. Tout ce qui suit le <<
sert de délimiteur pour lhérédoc
cat <<EOF This is first line So, this is 2nd Again, another line EOF
Entrée
Donc, si vous souhaitez stocker les trois lignes dans une variable, faites-le comme ci-dessous:
depuis la ligne de commande
$ var="$(cat <<EOF > Bingo > Gotcha > Enough > EOF > )"
Entrez
$ echo "$var" #double quotes are important Bingo Gotcha Enough
depuis lintérieur du script
#!/bin/bash var="$(cat <<EOF Bingo Gotcha Enough EOF )" echo "$var"
Commentaires
- pour que je puisse faire DU_RESULTS_HOME = " $ (cat < < EOF sudo -u hdfs hadoop fs -du -s / utilisateur / * | sort -r -k 1 -g | awk ' {suffix = " KMGT "; for (i = 0; $ 1 > 1024 & & i < longueur (suffixe); i ++) $ 1 / = 1024; imprimer int ($ 1) substr (suffixe, i, 1), $ 3; } ' | head -n 22 | awk ' {print $ 1 " \ t \ t \ t " $ 2} ') sudo -u hdfs hadoop fs -df -h / utilisateur EOF) "
-
<<
est destiné aux chaînes comme jai ' démontré, pas aux commandes. Voulez-vous exécuter les commandes et stocker les résultats dansDU_RESULTS_HOME
? - non, donc dans mon script jutilise tellement de variables, donc jessaye pour apprendre la technique du chat < < eof pour réduire le nombre de variables .. et éviter probablement dutiliser le format dimpression, qui est 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 "
"
aprèsThanks
, pour terminer la chaîne.<< EOF
thingy est appelé un " ici document ". Voir ici , ici et ici . ' ne sais pas ce que vous demandez à propos de ces deux douzaines de lignes de script shell, donc je peux ' faire des commentaires à ce sujet.