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"