在bash中转义字符的用法,我们实际上是转义了什么?

时间:2019-06-17 00:11:39

标签: bash

我正在阅读bash手册,发现转义字符definition令人惊讶,而不是修改,每个字符的含义都跟在它后面(如Java / C):

  

保留下一个字符的字面值

在bash中是不是意味着,我们仅使用它来转义特殊的字符,例如',“,\,$

其他情况,例如\ t \ e \ s \ t实际上完全是测试?我确认

echo test

echo \t\e\s\t 输出相同的结果。

1 个答案:

答案 0 :(得分:1)

  

在bash中是不是意味着,我们仅使用它来转义特殊的字符,例如',“,\,$

是的。另外,例如换行符:

echo foo
bar
# foo
# -bash: bar: command not found

echo foo \
bar
# foo
# bar
  

其他情况,例如“ \ t \ e \ s \ t”实际上与“测试”完全相同

如果未引用,是的。引用后,反斜杠被保留。某些UNIX实用程序的确将反斜杠用于“特殊含义”,但是使用实用程序而非bash来赋予那些序列含义。例如,printf和GNU echo在给定-e选项时:

/bin/echo \t\e\s\t
# test

/bin/echo "\t\e\s\t"
# \t\e\s\t

/bin/echo -e "\t\e\s\t"      # GNU version (will not do the same thing on Mac)
#         s       
# (tab)(escape)s(tab)

printf "\t\e\s\t"
#         s       
# (tab)(escape)s(tab)

@rici提醒我,如果使用$'...'形式的特殊引号,bash 可以本身解释C样式转义序列:

/bin/echo $'\t\e\s\t'
#         s       

实际上是bash,而不是echo