我想从用户输入的字符串生成文件名,并确保安全地转义它。
例如,如果用户输入/usr/bash
,则输出将为\/usr\/bash
如果输入为The great theater
,则输出为The\ great\ theater
。
答案 0 :(得分:5)
您确定需要这样做吗?这是一种代码味道。除了改变你的输入之外,你很可能有更好的方法去做你想做的事情。在使用变量时正确引用变量通常就足够了:
$ file='some file name.txt'
$ touch "$file"
$ ls "$file"
some file name.txt
但是,如果您坚持使用%q
格式与printf:
$ str='The great theater'
$ printf '%q\n' "$str"
The\ great\ theater
$ escaped=$(printf '%q' "$str")
$ echo "$escaped"
The\ great\ theater
请注意,这不会转义斜杠,因为它们通常不是特殊字符。