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

StackOverflow https://stackoverflow.com/questions/2484292

Вопрос

У меня есть скрипт 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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top