当前位置: 首页 > news >正文

Linux Shell 中需要转义的字符

本文整理 Linux Shell 中的转义字符。


在 Linux Shell 中,有很多字符是有特殊含义的,如果期望把这个字符当作普通字符来处理,需要经过 \ 的转义。

本文内容

    • 在双引号中即可变普通字符的特殊字符
      • 空格 '\ `
      • 星号 '\*`
      • 井号 `#`
      • 换行符
    • 即便在引号中也依然被 Shell 解释的特殊字符
      • 双引号 '\"'
      • 反引号 `` ` ``
      • 美元符 `\$`
      • 反斜杠 `\`
    • 任意字符

在双引号中即可变普通字符的特殊字符

*

空格 '\ `

这是转义空格。如果路径中包含空格,那么使用 \ 转义可以避免路径被分割成 Shell 的两个参数。

我有另一篇描述 Linux Shell 中路径空格转义相关的博客:

  • 了解 Windows/Linux 下命令行/Shell 启动程序传参的区别,这下不用再担心 Windows 下启动程序传参到 Linux 下挂掉了 - walterlv

星号 '*`

如果单独使用 * 将会表示当前路径下枚举的所有文件或文件夹。如果希望保持 * 的原意,那么将其包裹在引号内,或者使用转义 \*

井号 #

表示注释。

换行符

在引号中,也可以直接换行。这样换行符就是字符串的一部分。

即便在引号中也依然被 Shell 解释的特殊字符

" $ ` \

双引号 ‘"’

双引号的作用是避免空格将本来属于同一段参数的字符串分割成两部分。那么如果真的需要双引号的话就需要使用 \ 来转义。

echo "Hello \"Walterlv\""

这样才可以输出:Hello "Walterlv"

反引号 `

跟引号一样的作用。

在引号中也需要转义。

美元符 \$

在 Linux Shell 中,这是变量的引用。例如 ${x} 就是引用 x 变量。

$ echo "上一个程序的返回值为:\$? = $?"
上一个程序的返回值为:$? = 127

在引号中也需要转义。

反斜杠 \

因为 \ 是转义字符,所以其本身的使用也必然需要转义。

在引号中也需要转义。

任意字符

任意字符也可以使用 \ 转义,虽然没用,但也是一个特性。

$ echo \H\e\l\l\o\ \"\W\a\l\t\e\r\l\v\"
Hello "Walterlv"

参考资料

  • Escape Characters - Shell Scripting Tutorial
  • How to enable linux support double backslashes “\” as the path delimiter - Stack Overflow
  • shell - Backslash in Path - Unix & Linux Stack Exchange
  • shell - Which characters need to be escaped when using Bash? - Stack Overflow

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • Unity3D 入门:Unity Editor 编辑器常用快捷键
  • Unity3D 入门:Unity 项目版本管理建议使用的 .gitignore 忽略文件和 .gitattributes 文件(2020年4月更新)
  • Unity3D 入门:让 C# 脚本公开可在 Unity 编辑器中设置的属性
  • Unity3D 入门:如何管理 Unity 项目中的 NuGet 包?使用第三方 NuGet 包管理器——NuGetForUnity
  • Unity3D 入门:如何在脚本中找到游戏对象的父子级 祖孙级对象和它们的组件
  • Unity3D 入门:如何制作天空效果?天空盒的使用
  • Unity3D 入门:使用 Visual Studio 开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件
  • Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本
  • 比较 Windows 上四种不同的文件(夹)链接方式(NTFS 的硬链接、目录联接、符号链接,和大家熟知的快捷方式)
  • 了解 Windows Linux 下命令行 Shell 启动程序传参的区别,这下不用再担心 Windows 下启动程序传参到 Linux 下挂掉了
  • 适合 .NET 开发者用的 GitHub Actions(时不时更新)
  • 在 CMD 里根据进程名杀掉进程
  • 在 PowerShell 里根据进程名杀掉进程
  • 在制作多框架项目的 NuGet 包时应该注意的问题(buildMultiTargeting TargetFrameworks)
  • 专业团队:推荐一个网站,生成巨幅文字注释
  • 时间复杂度分析经典问题——最大子序列和
  • AHK 中 = 和 == 等比较运算符的用法
  • Android Volley源码解析
  • mysql 5.6 原生Online DDL解析
  • mysql外键的使用
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP 7 修改了什么呢 -- 2
  • React-Native - 收藏集 - 掘金
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Swoft 源码剖析 - 代码自动更新机制
  • vue 配置sass、scss全局变量
  • 测试开发系类之接口自动化测试
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 关于Java中分层中遇到的一些问题
  • 机器学习学习笔记一
  • 七牛云假注销小指南
  • 如何学习JavaEE,项目又该如何做?
  • 深度学习入门:10门免费线上课程推荐
  • 首页查询功能的一次实现过程
  • 通过npm或yarn自动生成vue组件
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 运行时添加log4j2的appender
  • Hibernate主键生成策略及选择
  • (C++17) optional的使用
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • .form文件_SSM框架文件上传篇
  • .net 获取url的方法
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [AAuto]给百宝箱增加娱乐功能
  • [android] 天气app布局练习