当我在bash
中使用“tab”键时(当您开始输入文件名并希望它完成时),bash
正确地转义文件名,如果我使用的话“逃脱”文件名,它有效。
For Instance:
An-Beat - Mentally Insine (Original Mix).mp3
=> bash
使用“TAB”后逃脱它
An-Beat\ -\ Mentally\ Insine\ \(Original\ Mix\).mp3
我正在搜索bash
的函数,该函数将以“tab”转义文件名的方式转义文件名。
答案 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
这样,它也可以转义!
或'
之类的字符。