我有一个包含某些变量的文件。我想读取每一行,替换变量并回显输出。我想阅读的源文件是:
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
提前感谢!
答案 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