转义文件名斜杠

发布于 2024-10-17 02:04:37 字数 179 浏览 4 评论 0原文

我想从用户输入的字符串生成文件名并确保它被安全转义。

例如,如果用户输入 /usr/bash 则输出将为 \/usr\/bash 如果输入是The Great Theater,则输出是The\ Great\ Theater

I want to generate filename from a user-inputed string and to make sure that it is safely escaped.

for example, if the user enters /usr/bash the output will be \/usr\/bash
and if the input is The great theater the output is The\ great\ theater.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

_蜘蛛 2024-10-24 02:04:37

您确定需要这样做吗?这是一种代码味道。很可能有一种比破坏你的输入更好的方法来完成你想做的事情。使用变量时正确引用它们通常就足够了:

$ file='some file name.txt'
$ touch "$file"
$ ls "$file"
some file name.txt

不过,如果您坚持,请在 printf 中使用 %q 格式:

$ str='The great theater'
$ printf '%q\n' "$str"
The\ great\ theater
$ escaped=$(printf '%q' "$str")
$ echo "$escaped"
The\ great\ theater

请注意,这不会转义斜杠,因为斜杠通常不是特殊字符。

Are you sure you need to do this? This is kind of a code smell. There's very likely a better way to do whatever you're trying to do than mangling your input. Properly quoting your variables when you use them usually suffices:

$ file='some file name.txt'
$ touch "$file"
$ ls "$file"
some file name.txt

If you insist, though, use the %q format with printf:

$ str='The great theater'
$ printf '%q\n' "$str"
The\ great\ theater
$ escaped=$(printf '%q' "$str")
$ echo "$escaped"
The\ great\ theater

Note that this won't escape slashes as they aren't normally special characters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文