以与Bash相同的方式转义文件名

时间:2011-04-09 21:42:05

标签: linux bash escaping

当我在bash中使用“tab”键时(当您开始输入文件名并希望它完成时),bash正确地转义文件名,如果我使用的话“逃脱”文件名,它有效。

For Instance:

An-Beat - Mentally Insine (Original Mix).mp3 => bash使用“TAB”后逃脱它 An-Beat\ -\ Mentally\ Insine\ \(Original\ Mix\).mp3

我正在搜索bash的函数,该函数将以“tab”转义文件名的方式转义文件名。

6 个答案:

答案 0 :(得分:25)

使用printf(1):

x='a real \good %* load of c$rap'
x=$(printf '%q' "$x")
echo $x

将返回

a\ real\ \\good\ %\*\ load\ of\ c\$rap

答案 1 :(得分:5)

我将详细阐述sehe对此问题的回应。

如果要传递要转换为shell脚本参数的参数,请将参数包含在“'s。

中。
#!/bin/bash
x=$(printf '%q' "$1")
echo $x

我非常喜欢printf解决方案,因为它可以像bash一样完成每个特殊字符。

答案 2 :(得分:3)

$ string="An-Beat - Mentally Insine (Original Mix).mp3"
$ echo ${string// /\\ }
An-Beat\ -\ Mentally\ Insine\ (Original\ Mix).mp3
$ string=${string// /\\ }
$ echo ${string//(/\\( }
An-Beat - Mentally Insine \( Original Mix).mp3

答案 3 :(得分:3)

“sehe”的解决方案工作正常,此外,您还可以使用双引号(“)而不是单引号(')来使用变量:

x="a real \good %* load of crap from ${USER}"
echo $(printf '%q' "$x")

当然字符串可能不包含$或“本身,或者你必须通过splash \ $来逃避那些。

答案 4 :(得分:2)

ls  --quoting-style=escape /somedir

这将输出转义的文件名,并且还可以使用unicode字符,printf方法不适用于中文,它会输出类似$'\ 206 \ 305 ...'

答案 5 :(得分:0)

我参加聚会可能有点晚了,但是对我有用的是:

ls  --quoting-style=shell-escape

这样,它也可以转义!'之类的字符。