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 に答える