【发布时间】:2016-06-16 22:28:12
【问题描述】:
我有一个稍微复杂的要求,即根据可以从属性文件配置的值来构建表达式。
我可以在读取属性文件后将表达式构建为字符串,但我无法使用 IF 条件评估表达式
cat $var_inputFile | while read line
do
arrIN=(${line//:/ })
echo $matchPattern
#if [[ ${arrIN[3]} = "SOA" && ${arrIN[2]} = "US" ]]
if [[ $matchPattern ]]
then
echo $line
fi
done
echo $matchpattern 打印出来
${arrIN[3]} = "SOA" && ${arrIN[2]} = "美国"
如果我取消注释该行过滤工作正常
#if [[ ${arrIN[3]} = "SOA" && ${arrIN[2]} = "US" ]]
但是下面的行不匹配
if [[ $matchPattern ]]
有没有办法将表达式构造成一个变量,然后使用该变量来计算 if 条件?
【问题讨论】:
-
我设法通过使用 eval 让它工作
-
请注意,在 bash 中,您的变量在循环之外将不可见,因为您在子 shell 中运行它。使用不必要的 cat 和 pipe 意味着管道的两端都在它们自己的子进程中运行。您应该将文件名重定向到最终的
done而不是done < "$var_inputFile"(并始终引用您的文件名变量)。 -
您的代码中未定义变量“$matchPattern”。