Bash: как обрабатывать переменные из входного файла? - PullRequest
0 голосов
/ 20 марта 2010

У меня есть скрипт 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 ]

2 голосов
/ 20 марта 2010

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

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

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

1 голос
/ 20 марта 2010

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

FILE=vexp.in
VAR=20100320
while IFS="|" read -r a b
do
   eval echo "$a something $b somethingelse"
done < "$FILE"
0 голосов
/ 21 марта 2010

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

while IFS="|" read -r a b
do
  eval a=$a
  eval b=$b
  echo "$a something $b somethingelse" 
done < "$FILE"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...