读取文件中的每一行,替换变量并将输出发送到文件bash

时间:2013-04-04 06:50:31

标签: bash variables loops while-loop cat

我有一个包含某些变量的文件。我想读取每一行,替换变量并回显输出。我想阅读的源文件是:

VAR1 is $A
VAR2 is $B
VAR3 is $C

我尝试了下面的脚本,但输出结果是一样的。

#/bin/sh
A=1
B=2
C=3

cat $file | while read LINE
do
 echo $LINE
done

如何让它替换变量来获得此输出?

VAR1 is 1
VAR2 is 2
VAR3 is 3

提前感谢!

3 个答案:

答案 0 :(得分:2)

而不是

echo $LINE

把:

eval echo $LINE

答案 1 :(得分:1)

eval将执行任何有效的shell代码,因此存在一定的安全风险。这是一个更集中的解决方案,进行参数扩展,而不存在任意代码执行的风险。

#/bin/sh
A=1
B=2
C=3

# Break each line into the variable name, "is", and the value. Then
# strip the leading dollar sign from the value to keep just the
# parameter name. Finally, use indirect parameter expansion to print
# the value.
while read name _ value
do
 value=${value#$}
 echo "$name is ${!value}"
done < "$file"

答案 2 :(得分:0)

由于eval存在安全风险, 为什么不试试: -

cat $file | while read LINE
do
   echo $LINE | sed -e "s/\$A/$A/g" -e "s/\$B/$B/g" -e "s/\$C/$C/g"
done

或者干脆: -

sed -e "s/\$A/$A/g" -e "s/\$B/$B/g" -e "s/\$C/$C/g" $file