bash评估来自字符串

时间:2016-02-23 14:56:59

标签: string bash if-statement evaluate

我有一个包含shell测试语句的文件。

我需要评估表达式。 例如:

a="something"
fromfile='[ "$a" == "something" ]'

if `$fromfile`; then
  echo "true"
else
  echo "false"
fi

它总是假的。 我尝试使用`` eval ,但仍无效。

解决方案是什么?

1 个答案:

答案 0 :(得分:1)

我猜你刚才没有找到正确的语法。你真的需要eval

a="something"
fromfile='[ "$a" = "something" ]'
if eval "$fromfile"
then
  echo "true"
else
  echo "false"
fi

但请阅读eval对安全方面施加的危险!如果您计划执行的字符串,如果只是部分(由用户,从数据库,从网站,......),您可能会带来安全风险。 (考虑fromfile='rm -rf ~'如果您不理解这一点:请勿尝试此操作!它会删除您主目录中的所有内容!

在大多数情况下,有更好的选择,比如声明shell函数并传递它们的名称,而不是包含完整的包含语法的字符串。