【Linux基础】关于Linux Shell中参数的引用(双引号““、反斜杠)的疑难杂症

安卓设备安装与使用curl全攻略:从Termux部署到HTTPS调试 curl作为支持HTTP、HTTPS、FTP等多种协议的网络传输命令行工具,是开发者和运维人员进行API调试、数据传输的利器。其核心原理是通过libcurl库处理网络请求,支持GET、POST等多种方法及Cookie、代理等复杂场景,技术价值在于提供了跨平台、脚本化的网络交互能力。在移动开发、自动化测试、服务监控等应用场景中,curl能快速验证接口、下载文件。在安卓设备上,由于系统限制,通常需借助Termux环境部署完整版curl,并解决HTTPS请求中的CA证书问题,例如通过安装ca-certificat 阅读详情

深入分析 Linux Shell 中的字符串、转义字符与 echo 命令行为

在 Linux Shell 中,字符串的处理常常会引发一些有趣且不易察觉的行为。特别是对于变量赋值、双引号和转义字符的使用,常常会出现一些让人困惑的输出结果。今天,我们将通过一个具体的例子来详细分析 Shell 中的字符串赋值和 echo 命令的行为,理解为什么在不同的情况下输出会有所不同。


1. 示例背景

我们从以下一系列命令和输出开始,逐步分析:

hzy@hzyUbuntu2404:~$ b="eeee
> aaaaaaaa"
hzy@hzyUbuntu2404:~$ echo b
b
hzy@hzyUbuntu2404:~$ echo $b
eeee aaaaaaaa
hzy@hzyUbuntu2404:~$ echo -e  $b
eeee aaaaaaaa
hzy@hzyUbuntu2404:~$ echo "$b"
eeee
aaaaaaaa
hzy@hzyUbuntu2404:~$ b="nihao \n
eeee"
hzy@hzyUbuntu2404:~$ echo "$b"
nihao \n
eeee
hzy@hzyUbuntu2404:~$ echo -e  "$b"
nihao
 
eeee

从上面的命令和输出中,我们可以看到几个不同的行为,接下来我们将逐步分析这些行为发生的原因。

2. 变量赋值中的换行符

首先,让我们关注变量赋值中的换行符。

b="eeee
aaaa"

在这个例子中,b 的赋值包含了换行符。换行符是在双引号内输入的,它被作为字符串的一部分赋值给变量 b。由于双引号允许在字符串中直接包含换行符,b 实际上包含了两个字符串:eeee 和 aaaaaaaa,并且它们之间有一个换行符。

变量 b 的值:

eeee
aaaaaaaa

重要概念:

  • 双引号:在双引号内,Shell 会保留空格和换行符的原始格式,这意味着换行符并不会被消除或替换为空格。 变量赋值:在赋值时,b变量中的换行符是有效的,它会作为一个实际的字符存储在变量中。

3. echo 的行为:引用变量时的输出

接下来,我们使用 echo 来输出变量的值。

echo b

输出:

b

这里的 echo b没有引用变量,所以它仅输出字面字符串 “b”。Bash 没有将 b 作为变量来处理,而是直接输出字面值。

echo $b

输出:

eeee aaaaaaaa

当使用 $b引用变量时,Shell 会对 b 进行变量扩展。由于 b 包含换行符,Shell 会将换行符替换为空格,因此输出是 eeee aaaaaaaa,而不是换行后的 eeee 和aaaaaaaa。

为什么换行符被替换为空格?
Bash 默认处理:当你直接引用变量时(没有加双引号),Bash 会自动将所有的换行符和连续的空格替换为一个空格。这是为了确保命令行参数处理的一致性。

4. echo -e 启用转义字符解析

echo -e $b

输出:

eeee aaaaaaaa

在这种情况下,-e选项并没有改变输出结果。原因是 -e选项是用于解析转义字符(如 \n、\t等),但变量 b 中的换行符已经被 Shell 替换为空格,因此 -e选项无法重新启用换行符的解析。

5. 使用双引号输出变量

echo "$b"

输出:

eeee
aaaaaaaa

当使用双引号引用变量时,Shell 会保留变量中的换行符。换句话说,双引号会让Bash 保持变量值的原始格式,不会将换行符替换为空格。因此,输出中正确显示了换行符的效果。

6. 另一个例子:转义字符 \n

接下来,我们考虑变量赋值中包含转义字符 \n 的情况。

b="nihao \n
eeee"

变量 b 的值:

nihao \n
eeee

在这个例子中,b 包含了一个字面上的 \n,而不是实际的换行符。虽然我们在字符串中写下了 \n,但 Shell 将其视为普通字符,而不是一个转义字符。换句话说,b 的内容是 “nihao \n eeee”,而 \n 只是普通的字符序列,并没有被解析为换行符。因此显示出来只有一个换行符的效果。

为什么 \n 没有被解释为换行符?
双引号与转义字符:双引号会让变量中的特殊字符保留原样,但不会自动解释其中的转义字符(需要echo -e来启用转义字符)。因此,\n 只是一个普通的字符序列,并没有被解析为换行符。

7. echo -e 解析转义字符

echo -e "$b"

输出:

nihao

eeee

在这个命令中,-e选项启用了转义字符的解析,结果是 \n被解析为换行符。因此,echo -e将输出实际的换行符,导致 nihao 和 eeee 出现在两行。

8. 总结

通过上面的分析,我们可以总结出以下几点关键概念:

  • 双引号:当你使用双引号引用变量时,Shell 会保留其中的空格、换行符和其他特殊字符的格式,不会对它们进行修改。

  • 变量引用($b):当你引用变量时,Shell 会自动将其中的换行符替换为空格,除非你使用双引号来保留格式。

  • 转义字符(\n):在双引号中,\n只是普通的字符序列,除非使用 -e选项启用解析,才会被解释为换行符。

Perl编程实战:从系统运维到文本处理的瑞士军刀 正则表达式作为文本处理的核心技术,通过模式匹配与替换实现高效数据提取与清洗,其原理基于有限自动机理论,在日志分析、数据转换等场景中具有不可替代的价值。系统运维自动化则依赖脚本语言的灵活性与系统交互能力,通过调用Shell命令、文件操作和进程管理实现任务自动化,提升运维效率。Perl语言正是这两大技术的集大成者,其内置的强大正则引擎与Unix系统深度集成,结合CPAN模块生态,成为处理复杂文本、快速原型开发和遗留系统维护的利器。本文以热词“perl单步运行”为切入点,深入解析Perl调试技巧与实战应用,帮助开 阅读详情

相关推荐

VSCode C/C++开发:深入解析c_cpp_properties.json配置原理与实战

在C/C++开发中,集成开发环境(IDE)的智能感知(IntelliSense)功能是提升编码效率的核心工具,它依赖于对项目编译环境的准确理解。其工作原理是通过解析代码的语法和语义,构建一个虚拟的编译上下文,从而提供精准的代码补全、错误检查和跳转定义。这项技术的核心价值在于弥合了编辑器与底层构建系统(如CMake、Makefile)之间的信息差,确保开发者获得与最终编译行为一致的实时反馈。在实际应用场景中,尤其是在跨平台项目或依赖复杂第三方库时,手动同步编辑器与编译器的配置(如头文件路径、预定义宏和语言标准

weixin_33796205的博客 547

shell中的参数引用

引用参数描述0,1,2..位置参数。从参数0开始。参数0引用启动bash程序的名称,如果函数在shell脚本中运行,则引用shell脚本的名称。由单引号或双引号引起来的字符串被作为一个参数进行传递,传递时会去掉引号。如果是双引号,则在调用函数之前,将对$Home之类的shell变量进行扩展。对于包含嵌入空白或其他字符的参数,需要使用单引号或双引号进行传递。*以一个单字符串显示...

weixin_33858485的博客 389

免安装版JDK 1.8配置实战:环境变量与Docker镜像构建

在Java开发中,JDK环境配置是日常工作的基础环节。对于需要多版本JDK共存、内网离线部署或容器化构建的团队而言,免安装版JDK提供了一种更可控、更灵活的选择。免安装版JDK本质上是官方发布的zip或tar.gz归档包,无需写入注册表,解压即可使用,其运行依赖JAVA_HOME与PATH环境变量的正确配置。通过合理设置环境变量,开发者可在多个JDK版本间自由切换,避免安装版全局生效带来的冲突。尤其在Docker镜像构建场景中,免安装版JDK可直接ADD进镜像,实现快速、可复现的构建流程。从下载、配置、验证

weixin_34080571的博客 358

linux shell中为什么建议将变量用双引号括起

在 shell 脚本中,将变量用双引号括起来是一种良好的编程习惯,特别是在处理可能包含空格、特殊字符或空值的字符串时。等)如果没有用双引号括起来,可能会被 shell 解释为通配符或其他特殊含义。会被 shell 视为通配符,而不是字面意义上的星号。是空的(即未设置或被设置为空字符串),那么不加双引号可能会导致语法错误。包含空格,那么不加双引号会导致字符串被当作多个参数处理。: 使用双引号可以使代码更加一致和易读,减少潜在的错误。: 变量中的特殊字符(如。

jkzyx123的博客 693

【福建dem】原始高程数据tif格式

DEM(Digital Elevation Model,数字高程模型)是一种地理信息系统中的关键数据集,它提供了地表地形的三维信息,通常用于分析地貌特征、模拟水文过程、规划建设、灾害预警等多个领域。这种数据对于地理分析非常有价值,例如,它可以用于计算坡度、坡向、地形粗糙度等地形特征,或者进行洪水模拟、地质灾害评估、太阳能辐射分析等。“福建dem原始高程数据tif格式”是研究和理解福建省地形地貌的重要资源,结合GIS工具,可以揭示丰富的地理信息,为科研、工程和决策提供有力支持。

鸿业远图科技 943

数学建模常用模型10 :数据包络(DEA)分析法(投入产出法)

数据包络分析是评价多输入指标和多输出指标的较为有效的方法,将投入与产出进行比较。它的结果包含的意思有: ①θ=1,DEA有效,表示投入与产出比达到最优 ②θ<1,非DEA有效,表示投入与产出比没有达到最优,一般来说,θ越大说明效果越好。 数据包络分析是通过对投入的指标和产出的指标做了一个线性规划,并且进行变换后,然后根据其线性规划的对偶问题(线性规划对偶问题具有经济学意义),求解这个对...

HaLosec_Wei 9万+

shell中的双引号与$

文章目录什么时候用双引号$要不要跟{}字符串中的变量怎么才能被正确解析? 什么时候用双引号 当参数值本身就带有空格时,如果不加双引号把参数值括起来,那么这个参数值可能会被扩展为多个参数值,而丢失原本的完整值。 建议传参时每个参数都使用双引号括起来。 例子: 比如在脚本中执行bin/hive -e命令 假设:sql="select * from table group by id;" 不能使用bin/hive -e $sql,而要使用bin/hive -e "$sql"。因为第一种方式相当于执行bin/

NFII 2364

从X86到ARM:将VINS-Fusion-GPU和ego-planner迁移到Jetson Orin-NX时,我踩过的那些‘环境差异’坑

本文详细介绍了将VINS-Fusion-GPU和ego-planner从X86平台迁移到Jetson Orin-NX(ARM架构)时遇到的环境差异问题及解决方案。内容涵盖ARM与X86的架构差异、依赖管理、性能调优和硬件接口适配,特别强调了CUDA在ARM平台上的优化配置和内存访问技巧,帮助开发者高效完成跨平台迁移。

weixin_42647395的博客 119

Shell脚本基础 以及 变量和引用

关于Shell脚本基础、变量和引用的一部分知识

qq_64227183的博客 1479

为什么Nano Banana在图像一致性上碾压GPT和豆包?深度解析其技术原理与使用技巧

本文深度解析了Nano Banana在图像一致性上超越GPT和豆包等工具的技术原理。它通过基于参考图的强条件生成、精准的区域感知与掩码控制等核心技术,实现了“外科手术式”的精准图像编辑。文章还分享了包括提示词工程、参数调整在内的实用技巧,并探讨了通过API Key将其能力集成到自动化工作流中的潜力。

omega的博客 357

kubeadm init 运行时kebelet启动失败问题

解决k8s kubeadm init时遇到的kubelet问题

ZDPZN的博客 6074

Linux Shell编程(10)——引用变量

当要引用一个变量的值时,一般推荐使用双引号。使用双引号除了变量名前缀($)、后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符。用双引号时$仍被当成特殊字符,允许引用一个被双引号引起的变量("$variable"), 那也是说$variable会被它的值所代替。用双引号还能使句子不被分割开.一个参数用双引号引起来能使它被看做一个单元,这样即使参数里面包含有空白字符也不...

weixin_30467087的博客 233

基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)

一、前言 关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL) 关于MIG IP核的用户端的接口时序可以参考这篇文章:XILINX 的 MIG IP(非AXI4)接口时序以及控制 二、实验内容 本次实验的内容主要是通过MIG IP核向DDR3读写数据,DDR3的接口时序由ddr_top模块提供: ddr_top模块的数据来源是wr_fifo,wr_fifo的数据实际来自top_sd_photo模块(本实验仿真

耐心的小黑的博客 3027

正斜杠与反斜杠:跨平台开发中的路径分隔符避坑指南

文件路径是编程和系统操作中的基础概念,其核心在于如何在不同操作系统中定位和访问资源。路径分隔符作为路径字符串的关键组成部分,其设计源于操作系统的发展历史:Unix系系统采用正斜杠(/),而Windows系统因历史兼容性选择了反斜杠(\)。理解这一原理对于实现跨平台兼容至关重要,其技术价值在于能显著提升代码的可移植性,避免因路径格式错误导致的运行时异常。在应用场景上,正斜杠广泛应用于Web URL、现代API及跨平台配置中,而反斜杠则需注意其在Windows原生环境及作为转义字符时的特殊处理。本文聚焦于**文

weixin_30765505的博客 800

矿石生成(1)

这个提供了标准化的矿石放置配置模板简化了常见和稀有矿石的配置过程遵循了Minecraft原版的世界生成模式提高了代码的可读性和可维护性通过使用这个类,模组开发者可以更轻松地配置矿石的生成规则,而不需要每次都手动编写完整的放置修饰符列表。这种设计模式在原版Minecraft和其他大型模组中也很常见,是一种良好的编程实践。// 导入语句...// 字段和方法...包声明表明这个类位于luckymod模组的WorldGen包中,专门处理世界生成相关配置。导入语句。

qq_24992377的博客 136

SAP录入总账凭证报错 公司代码未被分配给国家或用于计算程序的国家消息号 FF703

SAP系统报错FF703的解决方案:当公司代码未分配国家或未配置计税程序时,会导致增值税计算失败。处理方法:1)通过OX02检查公司代码国家字段;2)使用OBBG为国家分配计税程序(如TAXCN)。配置步骤:1)SPRO分配公司代码到国家;2)OBBG设置国家对应的计税程序。注意事项:历史数据需清理才能修改国家字段,不同账簿可配置不同计税程序。完成配置后即可正常处理含税凭证。

金牌架构师 557

Windows原生运行Linux命令:GnuWin32安装配置与实战应用指南

命令行工具是提升开发与运维效率的核心组件,其通过文本界面实现自动化操作和批量处理。在跨平台工作场景中,保持命令环境一致性对提升工作效率至关重要。GnuWin32技术通过将GNU工具链编译为原生Windows可执行文件,实现了Linux命令在Windows环境下的无缝运行,其技术价值在于无需虚拟化层即可提供轻量级、低开销的命令行增强方案。这一方案特别适用于需要在Windows本地进行开发测试、同时面向Linux服务器部署的运维与开发人员,能够大幅减少跨平台切换的认知负担。在实际应用场景中,GnuWin32的文

aofan9566的博客 357

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

PowerShell 第25章学习笔记:额外的提示、技巧与技术,Profile 自定义、进阶运算符与脚本块实战

PowerShell 实战技巧摘要 本文总结了 PowerShell 高级使用技巧,包括:1) Profile 脚本配置方法及加载顺序,用于环境初始化;2) 提示符自定义和颜色调整;3) 进阶运算符如类型转换、字符串处理等;4) 字符串和日期对象常用方法;5) WMI 日期时间转换;6) 参数默认值设置技巧;7) 脚本块使用;8) 实战清单和常见错误规避。重点介绍了如何通过 Profile 实现环境定制化,提升日常使用效率,同时提供了各种实用场景的代码示例和注意事项。

分享 Windows 系统部署、镜像封装、终端管理、故障排查与运维自动化实践,涵盖 Sysinternals、PowerShell 和 AI 工具应用。记录真实问题、探索过程与解决方法,也分享 AI 时代的学习心得和实践经验,让技术更易理解 2万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Git编辑器配置全攻略:从core.editor到团队协作最佳实践

在软件开发中,版本控制系统是团队协作与代码管理的核心基础设施。Git作为目前最主流的分布式版本控制系统,其命令行交互是开发者日常操作的基础。理解Git的工作原理,尤其是其如何调用外部编辑器处理文本输入,是提升开发效率的关键。通过配置`core.editor`,开发者可以将Git与熟悉的代码编辑器(如VS Code、Vim)深度集成,实现提交信息编写、冲突解决等场景的个性化与高效化。这项配置不仅关乎个人工作流的舒适度,更在团队协作中促进提交规范的统一。本文聚焦于`git config core.editor`

weixin_34245082的博客 390

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

彻底解决Java环境变量配置:从“不是内部命令”到多版本管理

环境变量是操作系统用于存储全局配置信息的关键机制,它定义了系统查找可执行文件、库文件和配置参数的路径。其核心原理在于,当用户在命令行输入指令时,系统会依据Path变量中预设的目录顺序进行搜索。对于Java开发而言,正确配置JAVA_HOME和Path环境变量具有至关重要的技术价值,它确保了java、javac等核心命令能在任意目录下被系统识别和调用,是搭建稳定开发环境的基础。这一配置不仅是运行Java应用程序的前提,更是使用Maven、Gradle等构建工具以及Tomcat等应用服务器的基石。在实际应用场景

weixin_34175509的博客 871

别再只配Path了!深度解析MinGW环境变量配置,彻底告别‘gcc不是命令‘

本文深度解析MinGW环境变量配置的常见问题,提供彻底解决'gcc不是命令'的终极方案。从Windows环境变量机制、终端差异到黄金配置法则,涵盖PowerShell脚本、包管理器方案及多版本管理技巧,助开发者一劳永逸解决编译环境问题。

weixin_30600197的博客 361

JavaScript注释精准匹配:正则表达式实战与避坑指南

在编程语言中,注释是开发者用于解释代码意图的重要元素。其语法规则要求解析工具必须准确区分注释与代码中的其他文本。正则表达式作为一种强大的文本模式匹配工具,通过定义特定模式,能够高效实现字符串的搜索与替换。在代码处理领域,这一技术对于实现代码压缩、文档生成和静态分析等自动化任务具有核心价值。例如,在构建代码格式化工具或进行源码分析时,需要安全地移除或提取注释而不破坏字符串和正则表达式字面量。本文深入探讨了如何运用**多轮扫描策略**和**状态机解析**思想,构建健壮的正则表达式,以精准匹配JavaScript

benben 336

Docker部署TeX Live完整指南:告别LaTeX环境配置噩梦

在计算机科研与论文写作中,LaTeX排版系统凭借高质量的公式与参考文献管理能力,成为学术写作的重要工具。然而,传统的TeX Live安装方式常面临体积庞大、宏包版本冲突、跨平台环境不一致等痛点。容器化技术通过将整套编译环境封装为镜像,实现了“环境即代码”的工程实践,让开发者能够以可复制、可分发的方式构建一致的排版工作流。本文从容器化原理出发,介绍基于Docker的TeX Live部署方案,涵盖镜像选型、中文字体支持、latexmk自动化编译、VS Code集成及常见报错排查,引导读者在论文写作、团队协作与C

weixin_33827731的博客 287

VS Code Code Runner Windows 中文乱码与输入卡死终极解决方案

终端编码、标准输入流与编译器环境是影响代码运行的基础技术要素。Windows 控制台默认 GBK 编码与 UTF-8 源文件存在天然冲突,导致中文注释解析失败、错误信息乱码;而 cmd 的非交互式执行模型会使 scanf/input() 无法接收键盘输入,表现为程序卡死。Code Runner 作为轻量级执行插件,在 Windows 下未主动适配编码切换与 stdin 透传机制,放大了这一兼容性问题。其技术价值在于暴露底层构建链路,适合教学与快速验证,但需通过 PowerShell 终端接管、chcp 65

weixin_42557803的博客 198

Shell脚本传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明

Shell脚本传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明

ken2232的博客 3万+

linux bash shell 中的单引号和双引号

当要引用一个变量的值时,一般推荐使用双引号。使用双引号除了变量名[2]前缀($)、后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符。[3]用双引号时$仍被当成特殊字符,允许引用一个被双引号引起的变量("$variable"),那也是说$variable会被它的值所代替。用双引号还能使句子不被分割开.[4]一个参数用双引号引起来能使它被看做一个单元,这样即使参数里面包含有空白字符也不会被shell分割开了。1#!/bin/bash3。...

qq_23251505的博客 1777
上一篇: 深度学习基本功——自动微分的正向模式与反向模式:理解JVP与VJP
下一篇: 大模型(LLM)入门学习路线分享(内含计划表和时间安排)
ACEEE-1222
博客等级 码龄4年 432粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值