Command substitution: cat with executable content

5,981

You want to do echo "$A". Wrapping the variable in the quotes makes it a string.

Example:

[root@talara test]# A=$(<test)
[root@talara test]# echo $A
FILE1 ham test test FILE1 ham test
[root@talara test]# echo "$A"
** test **
Share:
5,981

Related videos on Youtube

glenbot
Author by

glenbot

Updated on September 18, 2022

Comments

  • glenbot
    glenbot over 1 year

    I have a file called test and the contents are:

    ubuntu@regina:~$ cat test
    ** test **
    

    catting this file via command line works fine, but if I use command substitution I get an understandable but undesirable result.

    ubuntu@regina:~$ A=$(cat test)
    ubuntu@regina:~$ echo $A
    deployment detect.sh htpasswd.py logs test uwsgi-1.0.4 uwsgi-1.0.4.tar.gz test deployment        detect.sh htpasswd.py logs test uwsgi-1.0.4 uwsgi-1.0.4.tar.gz
    

    Because of the asterisks that exist in the file test it basically executes an echo * and lists the directory contents along with the file contents.

    Is there a parameter I can pass to the command substitution syntax that will not provide this result, or is there another idiom that should be used for this?

    • Tim
      Tim almost 12 years
      Note: using cat to read a single file is less efficient then reading the file, example: A=$(cat test) VS. A=$(<test)
    • glenbot
      glenbot almost 12 years
      Thank you, I didn't know that about that idiom
  • glenbot
    glenbot almost 12 years
    Thanks tim! That's exactly what I was looking for. Funny, I knew about quotes and now that I see the answer I feel pwned.
  • Tim
    Tim almost 12 years
    no prob. Shell quotes are like that, I forget often as well!