2

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

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

提前致谢!

4

3 回答 3

2

代替

echo $LINE

放:

eval echo $LINE
于 2013-04-04T07:03:35.027 回答
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"
于 2013-04-04T13:02:03.477 回答
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
于 2013-06-11T01:22:51.923 回答