Toutes les solutions ci-dessus fonctionnent, mais elles doivent également contourner un problème (échappatoires et caractères spéciaux) qui n'a pas besoin de se produire en premier lieu : Les caractères spéciaux lorsque la variable est développée par le shell. Il suffit de ne pas faire ça (expansion de variable) en premier lieu. Utilisez la variable directement, sans expansion.
De plus, si votre variable contient un secret et que vous voulez copier ce secret dans un fichier, il est préférable de ne pas avoir d'expansion dans la ligne de commande car le traçage/écho des commandes shell pourrait révéler le secret. Moyens, toutes les réponses qui utilisent $var
dans la ligne de commande peut présenter un risque potentiel pour la sécurité en exposant le contenu des variables au traçage et à la journalisation de l'interpréteur de commandes.
Pour les variables qui sont déjà exportées, utilisez ceci :
printenv var >file
Cela signifie, dans le cas de la question du PO :
printenv var >"$destfile"
Remarque : les noms de variables sont sensibles à la casse.
Avertissement : Ce n'est pas une bonne idée d'exporter une variable juste pour pouvoir l'imprimer avec printenv. Si vous avez une variable script non exportée qui contient un secret, l'exporter l'exposera à tous les futurs processus enfants (à moins qu'elle ne soit non exportée, par exemple en utilisant la commande export -n
).