0

我有一个 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
4

3 回答 3

2

您可能会发现此页面很有用。对于您给出的示例,请尝试:

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

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

于 2010-03-20T19:09:17.153 回答
1

你在寻找这样的东西吗?

FILE=vexp.in
VAR=20100320
while IFS="|" read -r a b
do
   eval echo "$a something $b somethingelse"
done < "$FILE"
于 2010-03-20T19:04:53.773 回答
0

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

while IFS="|" read -r a b
do
  eval a=$a
  eval b=$b
  echo "$a something $b somethingelse" 
done < "$FILE"
于 2010-03-21T01:31:18.853 回答