想用echo 命令把修改完的一段字符写入文件,发现换行符被当作正常字符处理了。一查发现默认是特殊字符是不转义的。
在shell脚本中,echo常用于显示消息或输出其他命令的结果。
echo命令的语法
echo[-neE] [参数]
- 当使用-n选项时,会抑制末尾的换行符。
- 如果使用-e选项,后面的反斜杠转义字符将被解释:
- \a – 警告 (BEL)。
- \b – 显示退格字符。
- \c – 抑制任何进一步的输出。
- \e – 显示转义字符。
- \f – 显示换页字符。
- \n – 显示新行。
- \r – 显示回车。
- \t – 显示水平制表符。
- \v – 显示垂直制表符。
- -E选项禁用转义字符的解释。这是默认设置。
在使用echo命令时有一些要考虑的重要点:
- Shell会在将参数传递给echo命令之前替换所有变量、通配符匹配和特殊字符。
- 虽然不是必需的,但将传递给echo的参数用双引号或单引号括起来是一种良好的编程实践。
- 使用单引号”时,将保留括在引号内的每个字符的文字值。变量和命令将不会被展开。
echo命令示例
在标准输出上显示一行文本。
echo Hello, World!输出:Hello, World!
显示包含双引号的文本行。
要打印双引号,可以将其括在单引号内或使用反斜杠字符进行转义。
echo 'Hello "Linuxize"'或echo"Hello \"Linuxize\""输出:Hello "Linuxize"
显示包含单引号的文本行。
要打印单引号,可以将其括在双引号内或使用ANSI-C Quoting。
echo "I'm a Linux user."或echo $'I\'m a Linux user.'输出:I'm aLinux user.
显示包含特殊字符的消息。
使用-e选项启用转义字符的解释。
echo-e "You know nothing, Jon Snow.\n\t- Ygritte"输出:You know nothing, Jon Snow. -Ygritte
模式匹配字符。
echo命令可以与模式匹配字符一起使用,例如通配符字符。例如,下面的命令将返回当前目录中所有的 .php 文件的名称。
echo The PHP files are: *.php输出:The PHP files are: index.php contact.php functions.php
重定向到文件。
除了在屏幕上显示输出之外,您还可以使用>、>>运算符将其重定向到文件。
echo-e 'The only true wisdom is in knowing you know nothing.\nSocrates'>> /tmp/file.txt如果file.txt不存在,该命令将创建它。使用>时,文件将被覆盖,而使用>>将输出追加到文件。使用cat命令查看文件内容:cat/tmp/file.txt输出:The only truewisdom isinknowing you know nothing.Socrates
显示变量。
echo还可以显示变量。在下面的例子中,我们将打印当前登录用户的用户名:
echo $USER
显示命令的输出。
使用$(command)表达式将命令输出包含在echo的参数中。以下命令将显示当前日期:
echo "The date is: $(date +%D)"输出:The date is: 04/17/19
以彩色显示。
使用ANSI转义序列更改前景和背景颜色或设置文本属性,如下划线和粗体。
echo -e "\033[1;37mWHITE"echo -e "\033[0;30mBLACK"echo -e "\033[0;34mBLUE"echo -e "\033[0;32mGREEN"echo -e "\033[0;36mCYAN"echo -e "\033[0;31mRED"echo -e "\033[0;35mPURPLE"echo -e "\033[0;33mYELLOW"echo -e "\033[1;30mGRAY"
打印上一条命令执行状态 echo $?
0是正常,其他是异常
返回码 | 表示意思 |
0 | successful termination |
1 | Catchall for general errors |
2 | Misuse of shell builtins (according to Bash documentation) |
126 | Command invoked cannot execute |
127 | “command not found” |
128+n | Fatal error signal “n” |
130 | Script terminated by Ctrl-C |
255* | Exit status out of range |
其他参考文件定义:
/usr/include/sysexits.h
#define EX_OK 0 /* successful termination */
#define EX__BASE 64 /* base value for error messages */
#define EX_USAGE 64 /* command line usage error */
#define EX_DATAERR 65 /* data format error */
#define EX_NOINPUT 66 /* cannot open input */
#define EX_NOUSER 67 /* addressee unknown */
#define EX_NOHOST 68 /* host name unknown */
#define EX_UNAVAILABLE 69 /* service unavailable */
#define EX_SOFTWARE 70 /* internal software error */
#define EX_OSERR 71 /* system error (e.g., can’t fork) */
#define EX_OSFILE 72 /* critical OS file missing */
#define EX_CANTCREAT 73 /* can’t create (user) output file */
#define EX_IOERR 74 /* input/output error */
#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */
#define EX_PROTOCOL 76 /* remote error in protocol */
#define EX_NOPERM 77 /* permission denied */
#define EX_CONFIG 78 /* configuration error */