57 votes

Comment puis-je lire un fichier et le rediriger vers une variable ?

J'ai un dossier avec un mot écrit dessus. Je veux que mon script mette ce mot dans une variable.

Comment puis-je faire ça ?

80voto

wich Points 7276

De plusieurs millions de façons...

le plus simple est probablement

my_var=$(cat my_file)

Si vous utilisez bash et que vous voulez être plus précis, vous pouvez utiliser le mapfile de bash4, qui place un fichier entier dans une variable de type tableau, une ligne par cellule.

mapfile my_var < my_file

0 votes

Depuis quand l'espacement avant et après = autorisé dans les scripts shell ?

1 votes

@nightcracker Désolé, erreur d'inattention, je l'avais déjà corrigé avant de voir votre commentaire.

1 votes

Les retours à la ligne feront que la première partie essaiera de s'exécuter et échouera avec une erreur de commande non trouvée use var=$(cat file | tr -d ' \n ') pour supprimer toutes les nouvelles lignes, y compris les lignes de fin de ligne.

46voto

dtmilano Points 26472

La méthode la plus simple est probablement :

var=$(< file)

qui ne crée pas de nouveau processus.

3 votes

Cela fonctionne dans Bash et d'autres shells avancés, mais pas dans le shell Bourne.

3 votes

Non multiplateforme... ne fonctionnera pas dans sh voir stackoverflow.com/questions/7427262/

0 votes

Est-ce que quelqu'un/quelque chose utilise encore des sh non-bash en 2018 ? Peut-être la montre de Dick Tracy ?

3voto

giles123 Points 108

Je pense que le moyen le plus simple est quelque chose comme

$ myvar=`cat file`

4 votes

Il n'est pas nécessaire d'exporter la variable et les espaces autour du signe égal ne fonctionneront pas.

2voto

Puddingfox Points 637
var="`cat /path/to/file`"

C'est le moyen le plus simple. Faites attention aux retours à la ligne dans le fichier.

var="`head -1 /path/to/file`"

Cela ne récupère que la première ligne et n'inclut jamais de nouvelle ligne.

0 votes

J'ai un fichier nommé "log", et $x="`cat log`" résulte en =2: command not found

1voto

nightcracker Points 34498

Je pense qu'il va supprimer les nouvelles lignes, mais le voici quand même :

variable=$(cat filename)

5 votes

Il n'enlève que le dernier saut de ligne. Si les autres lignes sont supprimées, c'est parce que vous ne citez pas la variable en sortie. echo $variable vs. echo "$variable"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X