【问题标题】:Shell Script : Evaluate if condition through the expression in a variableShell 脚本:通过变量中的表达式评估 if 条件
【发布时间】: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”。

标签: shell unix scripting


【解决方案1】:

您必须使用eval 来执行字符串。

此外,明智的做法是在变量引用(如${arrIN[3]})周围使用双引号,否则如果变量恰好为空,则会出现语法错误。

然后就可以使用了

if eval "[[ $matchPattern ]]"

【讨论】:

    猜你喜欢
    • 2018-12-29
    • 2012-04-29
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多