Bash: как обрабатывать переменные из входного файла?

У меня есть скрипт bash, который читает входные данные из файла, подобного этому:

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

Файл, который он читает, выглядит так:

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

Тем не менее, я хотел бы иметь возможность вставлять имена переменных в этот файл, когда он мне подходит, и чтобы скрипт обрабатывал их, когда видит, так что файл может выглядеть так:

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

Так $VAR например, сегодняшняя дата может привести к выводу, подобному следующему:

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

3 ответа

Решение

Вы можете найти эту страницу полезной. Для примера, который вы привели, попробуйте:

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

... хотя, если формат файла или язык, который вы используете, не установлены в камне, могут быть более подходящие альтернативы;)

Вы ищете что-то подобное?

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

Для общего решения, которое заменит любую переменную среды (а также выполнит любой код, поэтому не используйте его, если вы не управляете переменными или не очищаете входные данные), используйте eval:

while IFS="|" read -r a b
do
  eval a=$a
  eval b=$b
  echo "$a something $b somethingelse" 
done < "$FILE"
Другие вопросы по тегам