tl; dr:要引用特殊字符,请用反斜杠\
将其转义或用双" "
引号或单引号引起来' '
。Tab ↹完成需要适当的报价。
您要的是所谓的报价:
引用用于将某些字符或单词的特殊含义删除。(…)共有三种报价机制: 转义符,单引号和双引号。
[引自man bash
]
用转义符报价 \
不带引号的反斜杠(\
)是转义字符。它会保留下一个字符的字面值,但除外<newline>
。
因此,要输入具有特殊字符的目录或文件,请使用来对后者进行转义\
,例如:
cd space\ dir # change into directory called “space dir”
cat space\ file # print the content of file “space file”
echo content > \\ # print “content” into file “\”
cat \( # print the content of file “(”
ls -l \? # list file “?”
bash
的Programmable Completion(又名Tab ↹Completion)会自动使用转义字符转义特殊字符\
。
用双引号报价 " "
在双引号包围的字符保留了引号中的所有字符的字面意义,例外$
,`
,\
,和,启用了历史扩展的时候,!
。
因此,要输入具有特殊字符的目录或文件,请至少对文件名或路径的后者或大部分进行双引号转义,例如:
cd space" "dir # change into directory called “space dir”
cd spac"e di"r # equally
cd "space dir" # equally
cat "space file" # print the content of file “space file”
cat "(" # print the content of file “(”
ls -l "?" # list file “?”
与一样$
,`
并!
在双引号中保留其特殊含义,对双引号字符串执行Parameter Expansion,Command Substitution,Arithmetic Expansion和History Expansion。
用单引号报价 ' '
将字符括在单引号中可保留引号内每个字符的字面值。即使在单引号之前加反斜杠,也不能在单引号之间引起单引号。
因此,要输入具有特殊字符的目录或文件,请至少对文件名或路径的后者或大部分进行双引号转义,例如:
cd space' 'dir # change into directory called “space dir”
cd spac'e di'r # equal
cd 'space dir' # equal
cat 'space file' # print the content of file “space file”
cat '(' # print the content of file “(”
ls -l '?' # list file “?”
echo content > '\' # print “content” into file “\”
您可以在man bash
/ QUOTING,wiki.bash-hackers.org和tldp.org上找到有关报价的更多信息。