GNU/Linux >> Tutoriels Linux >  >> Linux

Comment différer l'expansion variable ?

Je voulais initialiser certaines chaînes en haut de mon script avec des variables qui n'ont pas encore été définies, telles que :

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

puis plus tard sur PLACE , EVENT , ACTION , et RESULT sera défini. Je veux ensuite pouvoir imprimer mes chaînes avec les variables développées. Est ma seule option eval ? Cela semble fonctionner :

eval "echo ${str1}"

est-ce la norme ? Y a-t-il une meilleure manière de faire cela? Ce serait bien de ne pas exécuter eval étant donné que les variables peuvent être n'importe quoi.

Réponse acceptée :

Avec le type d'entrée que vous montrez, la seule façon de tirer parti de l'expansion du shell pour substituer des valeurs dans une chaîne est d'utiliser eval sous une certaine forme. Ceci est sûr tant que vous contrôlez la valeur de str1 et peut s'assurer qu'il ne référence que des variables connues comme sûres (ne contenant pas de données confidentielles) et ne contient aucun autre caractère spécial du shell sans guillemets. Vous devez développer la chaîne entre guillemets doubles ou dans un document ici, de cette façon uniquement "$` sont spéciaux (ils doivent être précédés d'un dans str1 ).

eval "substituted="$str1""

Il serait beaucoup plus robuste de définir une fonction au lieu d'une chaîne.

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

Définissez les variables puis appelez la fonction fill_template pour définir les variables de sortie.

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. Expansion et variables des accolades Bash ?

  2. Comment obtenir un type de données Variables dans Zsh ?

  3. Comment définir la variable $Path sous Linux

  4. Exemples de commandes d'exportation Linux (Comment définir des variables d'environnement)

  5. Comment stocker une commande dans une variable dans un script shell ?

Comment définir des variables d'environnement dans MacOS

Comment utiliser des variables dans Ansible Playbook

Comment utiliser des variables dans les scripts Shell

Comment installer Maven sur Windows

Comment définir/annuler les variables d'environnement sous Linux

Comment définir une variable d'environnement dans Bash