bash 从字符串中评估 if 语句

bash evaluate if statement from string

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

我需要计算表达式。 例如:

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

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

它总是抛出错误。 我尝试使用 ``eval,但仍然无效。

解决方法是什么?

我猜你只是没有找到正确的语法。为此,您确实需要 eval

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

但是请阅读 eval 对安全方面造成的危险!如果你打算执行你 给定 的字符串,如果只是部分(由用户,从数据库,从网站,......)你可能会引入安全风险. (考虑 fromfile='rm -rf ~'如果你不明白这一点:不要尝试这个!它会从你的主目录中删除所有内容!

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