使用相同的方式逃脱FileNames Bash做到这一点

当我在bash使用“tab”键时(当你开始input文件名并且你想要它完成时), bash正确地转义文件名,如果我恰好使用那个“转义”文件名,它就可以工作。

例如:

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

我正在寻找一个bash的函数,它将以与“tab”转义文件名相同的方式来转义文件名。

提前致谢。

Solutions Collecting From Web of "使用相同的方式逃脱FileNames Bash做到这一点"

使用printf (1):

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

将返回

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

我要详细说明sehe对这个问题的回应。

如果要将参数传递为shell脚本参数,请将参数包含在“s”中。

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

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

 $ 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 

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

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

当然,这个字符串可能不包含$或者“本身,或者你必须通过\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\