Bash:如何处理输入文件中的变量?

时间:2010-03-20 18:52:32

标签: bash file variables file-manipulation

我有一个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 个答案:

答案 0 :(得分:2)

您可能会发现this page有用。对于您提供的示例,请尝试:

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

...虽然如果您使用的文件格式或语言不是一成不变的,那么可能会有更好的选择;)

答案 1 :(得分:1)

你在找这样的东西吗?

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

答案 2 :(得分:0)

对于一个通用的解决方案,它将替换任何环境变量(以及执行任何代码,所以如果你不控制变量或清理输入就不要使用它),请使用eval:

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