【linux】echo命令踩坑详解

想用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 */

相关推荐

  1. 【linux】echo命令详解

    2024-01-03 17:48:01       37 阅读
  2. mySQL记录

    2024-01-03 17:48:01       44 阅读
  3. Pinia 记录

    2024-01-03 17:48:01       35 阅读
  4. FollowYourPose 安装

    2024-01-03 17:48:01       29 阅读
  5. golang记录

    2024-01-03 17:48:01       21 阅读
  6. Keepalived

    2024-01-03 17:48:01       26 阅读
  7. uniapp细节

    2024-01-03 17:48:01       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-03 17:48:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-03 17:48:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-03 17:48:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-03 17:48:01       20 阅读

热门阅读

  1. Linux:磁盘分区

    2024-01-03 17:48:01       34 阅读
  2. 【算法题】30. 串联所有单词的子串

    2024-01-03 17:48:01       32 阅读
  3. H12-831_265

    2024-01-03 17:48:01       36 阅读
  4. 塔夫特原则

    2024-01-03 17:48:01       46 阅读
  5. 数字孪生项目中的导航片及寻路实现算法的探索

    2024-01-03 17:48:01       38 阅读
  6. Unity 关于点击不同物品移动并触发不同事件

    2024-01-03 17:48:01       40 阅读
  7. Jenkinsfile构建

    2024-01-03 17:48:01       39 阅读
  8. 关于数据集的了解

    2024-01-03 17:48:01       39 阅读
  9. 前端工作细节提升总结

    2024-01-03 17:48:01       37 阅读
  10. 搭建golang开发环境

    2024-01-03 17:48:01       45 阅读