简体   繁体   中英

Bash: how to process variables from an input file?

I've got a bash script that reads input from a file like this:

while IFS="|" read -r a b
do
   echo "$a something $b somethingelse" 
done < "$FILE"

The file it reads looketh like this:

http://someurl1.com|label1
http://someurl2.com|label2

However, I'd like to be able to insert the names of variables into that file when it suits me, and have the script process them when it sees them, so the file might look like this:

http://someurl1.com?$VAR|label1
http://someurl2.com|label2

So $VAR could be, for example, today's date, producing an output like this:

http://someurl1.com something label1 somethingelse
http://someurl2.com?20100320 something label2 somethingelse

You might find this page useful. For the example you gave, try:

while IFS="|" read -r a b
do
    repl=`date +%Y%m%d`
    a=${a/\$VAR/$repl}
    echo "$a something $b somethingelse" 
done < "$FILE"

...though if the file format or language you're using aren't set in stone, there might be better alternatives ;)

Are you looking for something like this?

FILE=vexp.in
VAR=20100320
while IFS="|" read -r a b
do
   eval echo "$a something $b somethingelse"
done < "$FILE"

For a general solution that'll replace any environment variable (as well as execute any code, so don't use this if you don't control the variables or sanitize the input), use eval:

while IFS="|" read -r a b
do
  eval a=$a
  eval b=$b
  echo "$a something $b somethingelse" 
done < "$FILE"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM