【问题标题】:escaped filename slashes转义的文件名斜杠
【发布时间】:2011-02-11 04:09:42
【问题描述】:

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

例如,如果用户输入/usr/bash,则输出将为\/usr\/bash 如果输入为The great theater,则输出为The\ great\ theater

【问题讨论】:

  • 真正想做什么?
  • -1 没有明确说明需要转义的内容,更重要的是,为什么。
  • 我遇到了类似的问题:需要添加另一个反斜杠来转义现有的反斜杠。例如,将 c:\home 更改为 c:\\home.

标签: string bash escaping


【解决方案1】:

您确定需要这样做吗?这是一种代码气味。很可能有比修改输入更好的方法来做任何你想做的事情。在使用变量时正确引用变量通常就足够了:

$ 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

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

【讨论】:

  • 我将支持“代码气味”评论,并补充说需要转义的内容以及需要如何转义很大程度上取决于字符串将会发生什么。 printf %q 确实引用适合 bash 解释。如果您需要转义,例如在 SQL 查询中使用,那是一组不同的转义规则。如果它要被 bash 然后 SQL 解释,它需要被双重转义(并且以正确的顺序)!
猜你喜欢
  • 2013-08-09
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2015-09-21
  • 2011-11-09
相关资源
最近更新 更多