我正在阅读bash手册,发现转义字符definition令人惊讶,而不是修改,每个字符的含义都跟在它后面(如Java / C):
保留下一个字符的字面值
在bash中是不是意味着,我们仅使用它来转义特殊的字符,例如',“,\,$
其他情况,例如\ t \ e \ s \ t实际上完全是测试?我确认
echo test
echo \t\e\s\t
输出相同的结果。
答案 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
。