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 函数并传递它们的名称而不是完整的包含语法的字符串。
我有一个包含 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 函数并传递它们的名称而不是完整的包含语法的字符串。