shellunixsh

How to read a file into a variable in shell?


I want to read a file and save it in variable, but I need to keep the variable and not just print out the file. How can I do this? I have written this script but it isn't quite what I needed:

#!/bin/sh
while read LINE  
do  
  echo $LINE  
done <$1  
echo 11111-----------  
echo $LINE  

In my script, I can give the file name as a parameter, so, if the file contains "aaaa", for example, it would print out this:

aaaa
11111-----

But this just prints out the file onto the screen, and I want to save it into a variable! Is there an easy way to do this?


Solution

  • In cross-platform, lowest-common-denominator sh you use:

    #!/bin/sh
    value=`cat config.txt`
    echo "$value"
    

    In bash or zsh, to read a whole file into a variable without invoking cat:

    #!/bin/bash
    value=$(<config.txt)
    echo "$value"
    

    Invoking cat in bash or zsh to slurp a file would be considered a Useless Use of Cat.

    Note that it is not necessary to quote the command substitution to preserve newlines.

    See: Bash Hacker's Wiki - Command substitution - Specialities.