第一个问题:
假设我们编写一个简单的程序,它接受命令行参数并打印到文件。如果用户输入
writetofile 你好!0\n w%orl\t!@#y
bash 回复
!0: 事件没有
成立。
如果用户不知道使用引号('')或转义字符('\')之类的东西,我该如何处理这些东西而不是 bash 将其理解为命令?
第二个问题:
一旦我得到这些参数,我如何将它们解释为特殊字符而不是字符序列。 (即 \t 是制表符,而不是 '\''t')
也就是说,如何确保程序将其写入文件:
Hello!0
w%orl !@#y
and not
Hello!0\n w%orl\t!@#y
您无法让 bash 停止将命令行解析为命令行。在你的具体情况下,set +H
将禁用历史扩展,从而允许 !0 作为文字,但如果包含命令,命令仍然会失败(parenthesis)
, $variables
, #comments
, ampersand &
以及 shell 语法的十几个其他元素。
请注意,这仅适用于 shell 的解析阶段,不适用于任何按字面传递的数据execve
或类似的。
要么让用户引用数据('single quotes'
将处理除其他单引号之外的所有内容),或者让您的程序本身读取数据,以便交互进行
$ writetofile
Please enter your gibberish and press enter: Hello!0\n w%orl\t!@#y
Thank you for your eloquent contribution.
$
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)