Existe-t-il un moyen élégant de définir une variable shell sur le contenu d'un fichier?

11

Disons que j'ai des données de configuration dans un fichier config. Pour plus de commodité, je voudrais charger ces données dans une variable shell, CONFIG_DATA.

Évidemment je peux faire:

CONFIG_DATA="$(cat config)"

Mais cela me semble un peu inutilecat . Est-ce la seule façon de procéder? Ou existe-t-il une manière plus élégante de le faire?

Les réponses devraient préférer POSIX mais peuvent utiliser n'importe quel shell.

strugee
la source
2
Lire un fichier entier en mémoire comme celui-ci est presque toujours une mauvaise idée, quelle que soit la façon dont vous l'écrivez.
Satō Katsura
2
@SatoKatsura dans certains cas, très vrai. cependant, pour les besoins de cette question, vous pouvez supposer que le fichier est super petit, donc ce n'est pas un problème majeur.
Strugee
1
@SatoKatsura: pourquoi?
RemcoGerlich

Réponses:

23

Dans Bash et le shell Z, au moins, il existe un moyen plus rapide:

CONFIG_DATA=$(<config)

Pour citer la page de manuel du shell Bourne Again:

La substitution de commande $ (fichier cat) peut être remplacée par l'équivalent mais plus rapide $ (<fichier).

Kamaraj
la source
1
Je ne considérerais pas cela comme une bonne option. Quels que soient les sentiments d'OP envers l'utilisation inutile du chat, l'exemple de l'OP est suffisamment simple pour que la plupart des utilisateurs de Bash le comprennent. Il est également assez portable. Maintenant, $(<file)c'est beaucoup moins courant, donc cela pourrait entraîner beaucoup plus de WTF; et le gain de vitesse de cette opération, si une telle configuration doit être chargée dans une variable, est probablement négligeable
MatthewRock
6
@MatthewRock note que beaucoup de très mauvaises pratiques sont courantes et familières. Les utilisations inutiles du chat en sont un exemple, en for i in $(cat file); do ...est un autre. Le fait qu'ils soient courants n'est pas une raison pour continuer à utiliser de mauvais outils. Ce qui ne veut pas dire que cette utilisation particulière du chat est un mauvais tooi, je ne sais pas s'il existe un moyen plus portable. Dire simplement que commun et familier! = Bon.
terdon