在Lua中使用%q来逃避shell参数有多好?

在Lua中使用%q来逃避shell参数有多好?,第1张

概述假设我们需要将一些参数传递给 shell命令. (让我们假设一个Bourne兼容shell.) 例如,假设我们要打印字符串他说“这是一个男孩”;确定使用echo(1). 当然,我们不能这样做: s = [[He said "It's a boy"; sure]]os.execute("echo " .. s) 但以下工作正常: s = [[He said "It's a boy"; sure]] 假设我们需要将一些参数传递给 shell命令. (让我们假设一个Bourne兼容shell.)

例如,假设我们要打印字符串他说“这是一个男孩”;确定使用echo(1).

当然,我们不能这样做:

s = [[He saID "It's a boy"; sure]]os.execute("echo " .. s)

但以下工作正常:

s = [[He saID "It's a boy"; sure]]os.execute(("echo %q"):format(s))

我的问题:您认为使用%q引用shell参数是否足够好?

我已经知道如果我们的参数包含一个换行符,%q就不太好了(它会被转换为斜线换行符,这意味着shell将看不到任何字符;但至少它不会破坏命令).这是针对我们的一个案例.还有其他情况下%q会让我们失望吗?

解决方法 从5.1的参考手册:

the string is written between double quotes,and all double quotes,newlines,embedded zeros,and backslashes in the string are correctly escaped when written

假设这是正确的,那些是唯一将被转义的字符.在您的情况下,shell会识别特殊字符,例如;,而不是在此列表中,因此这不会逃脱它.但%q有效,因为它用引号括起字符串,所以;隐藏起来.此外,这是为了生成一个可由Lua读取的字符串.因此,在引号,反斜杠等中添加转义字符不一定是命令shell了解命令所需的内容.对于任何shell来说,我认为很难确定%q是否总能满足您的需求.

总结

以上是内存溢出为你收集整理的在Lua中使用%q来逃避shell参数有多好?全部内容,希望文章能够帮你解决在Lua中使用%q来逃避shell参数有多好?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1228252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存