我有一个包含某些变量的文件。我想阅读每一行,替换变量并回显输出。我想阅读的源文件是这样的:
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
提前致谢!
我有一个包含某些变量的文件。我想阅读每一行,替换变量并回显输出。我想阅读的源文件是这样的:
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
提前致谢!
代替
echo $LINE
放:
eval echo $LINE
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"
由于 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