Удар:как обрабатывать переменные из входного файла?
-
21-09-2019 - |
Вопрос
У меня есть скрипт 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
Решение
Вы могли бы найти эта страница полезный.Для примера, который вы привели, попробуйте:
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"