bash中的转义

本文深入探讨了转义序列在Shell环境中的使用方法与注意事项,包括特殊转义序列的功能介绍、PS转义序列的使用场景以及ESC转义序列的应用案例。文章详细列举了一些常见的转义序列,并通过实例演示了它们在实际操作中的应用。

转义是引用单字符的方法.在单个字符前面的转义符(\ 倒斜杠)告诉shell不必特殊解释这个字符,只把它当成字面上的意思. 

但在一些命令和软件包里,比如说echo和sed,转义一个字符可能会引起一个相反的效果--因为它们可能触发那个字符的特殊意思.  

---引自 abs



一些特殊的转义序列: 
(以 help echo 的结果为蓝本, 添加部分注释, 别人写的,无为有修改)
\a        终端响铃(小机不支持...同 \x07, \07)
\b        退格, 光标左移一格.
\c        禁止行尾自动换行, 对echo有效, printf无效
\e        ESC转义序列(见下, 同\E, \033, \x1b; 就是ESC键按下的效果)
\f        换页(光标移到下一行的相同列)
\n        换行(光标移动下一行行首)
\r        回车(光标回到本行行首)
\t        制表符(TAB键按下的效果...)
\v        纵向制表符(同\f)
\x00        十六机制数的值(两位[0-9a-fA-F]的十六进制数).
\\        倒斜杠...
\000        八进制数的值(以数字开头, 限最多3位[0-7]的数字)

PS 转义序列 (prompt symbol, bash提示符, 无为未验证): 
(出自 http://www.linuxselfhelp.com/how ... h-Prompt-HOWTO.html , 翻译有参考)
       \a     响铃
       \d     日期, 格式为 "Weekday  Month  Date", ("Tue May 26")
       \e     ESC转义序列.
       \h     主机名的第一部分. (froms)
       \H     完整主机名. (froms.vuuvsoft.com)
       \n     换行
       \r     回车
       \s     shell的名称. 根据路径获取. 如/usr/bin/bash --> "bash"
       \t     时间, 格式 HH:MM:SS 24小时制. ("23:01:01")
       \T     时间, 格式 HH:MM:SS 12小时制. ("11:01:01")
       \@     带有 am/pm 的 12小时制 时间
       \u     用户名.        ("root")
       \v     bash版本号 ("2.00")
       \V     bash版本号及补丁级别 ("2.00.0")
       \w     当前工作目录完整路径 ("/home/froms")
       \W     当前工作目录目录名        ("froms")
       \!     当前命令在历史缓冲区中的位置
       \#     命令编号(只要您键入内容,它就会在每次提示时累加)
       \$     如果你是root, 显示 "#"; 否则, "$".
       \nnn   八进制数
       \\     倒斜杠
       \[     这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前. 它使 bash 能够正确计算自动换行. 
       \]     这个序列应该出现在非打印字符序列之后. ( \[\e[32;47m\] )

       (无为注: 当然, 你也可以用命令替换来显示时间日期: PS1="$(date +%x-%X)")
     

( 以下内容来自 man console_codes 的结果, 翻译有修改, 并删除部分无法在小机使用的序列. )
ESC 转义序列:

        c        重置终端.
        D        换页(纵向制表符).
        E        换行.
        H        设置当前列为制表位. (未验证)
        M        翻转换行, 向上换页(Reverse linefeed).
        7        存储当前状态(光标坐标, 属性).
        8        恢复上一次储存的设置
        [        (见下)
        #8        屏幕校准测试 - 以E填充屏幕.

        例: printf "\e#8"


ESC[ 转义序列:  
        A        光标上移指定行. 
        B        光标下移指定行.
        C        光标右移指定列.  \e[3C 右移3列
        D        光标左移指定列.
        G        光标移动到当前行的指定列.
        H        光标移动到指定行和列(行列起始计数为1, tput cup 的起始计数为0).  
         \e[y;xH y=3; x=5 第三行第五列. 
        J        删除内容(默认从当前光标处到结尾).
         \e[1J:        删除从开始到光标处的内容.
         \e[2J:        清空整个屏幕.
        K        删除行(默认从当前光标处到行尾).
         \e[1K:        删除从行首到当前光标处的内容.
         \e[2K:        删除整行.
         
        d        光标移动到当前列指定行
        f        同\H.   
        h        设置模式(见下).
        l        重置模式(见下).
        m        设置属性(见下). 
        n        状态报告(见下).
        r        设置滚动范围; 参数为首行和末行.(好像不能用...)
        s        存储光标位置.
        u        恢复光标位置.


设置图形属性:
        \e[ <属性数值> m 设置显示属性. 同样的序列可以设置一个或多个属性, 以 ";" 分开.
        
        特效代码: 
        0 清除所有属性
        1 高亮(并加粗, 可惜小机没有加粗)
        2 暗色(以一般亮度显示, 小机不支持)
        4 下划线
        5 闪烁(小机闪烁频率太低, 无用)
        7 反显.
        8 消隐(一段字不显示, 小机不支持)

        22 正常亮度
        24 关闭下划线
        25 不闪烁
        27 不反显
         
        颜色代码前缀: 
        3: 前景 9: 加亮前景 
        4: 背景 10: 加亮背景
        颜色代码后缀(加亮效果):
        0 黑(深灰)
        1 红(亮红)
        2 绿(亮绿)
        3 棕(黄色)
        4 蓝(浅蓝)
        5 紫(淡紫)(这个看不出来)
        6 青(亮青)
        7 浅灰(白)
        9 默认颜色(限3,4前缀)
         
       示例:        绿色前景, 亮青背景, 下划线. 0表示清除之前设置的所有属性.
        \e[0;32;106;4m
        打印一段内容后, 不要下划线了
        \e[24m
        又想反显了(就是绿色背景, 亮青前景)
        \e[7m
        那么, 怎么除去反显呢?


状态报告:
        \e[5n
        设备状态报告(DSR): 以\e[0n 应答(终端准备好). 
        \e[6n
        光标位置报告(CPR): 以\e[y;xR 应答, 这里 x,y 指光标位置. 


设置模式( 用l替换最后一个h就是重置模式 )
        \e[?5h        全屏反显.
        \e[?25h        显示终端光标

<think>我们被要求回答关于bash中换行的问题,并在最后提出3-5个相关问题。 问题:bash中换行 我们需要解释在bash中如何处理换行,例如在脚本中如何换行而不立即执行命令,或者如何在字符串中插入换行符等。 然后,按照格式要求,在最后输出“§§相关问题§§”并列出3-5个相关问题。 回答内容: 在Bash中,换行通常表示一个命令的结束(除非命令被明确地续行)。但是,有时我们需要在命令很长时进行换行以提高可读性,或者在字符串中包含换行符。 1. 命令续行:使用反斜杠(\)放在行尾,表示下一行是当前命令的延续。 例如: echo "这是一条很长的命令,我们将其分成两行" \ "这是第二行" 2. 在字符串中插入换行:可以使用$'\n'(ANSI-C引用)或者直接使用换行符(在引号内直接按回车,但需要确保字符串是使用双引号或单引号跨行定义)。 例如: str=$'第一行\n第二行' 或者 str="第一行 第二行" # 注意:这样会包含换行和缩进空格 3. 在echo命令中使用-e选项来解析转义字符,如\n: echo -e "第一行\n第二行" 4. 使用printf命令,它默认支持转义字符: printf "第一行\n第二行\n" 注意:在脚本中,如果一行命令太长,使用反斜杠换行可以使得代码更易读。 然后,我们需要在最后输出“§§相关问题§§”并列出3-5个相关问题。 相关问题应围绕Bash中的换行、续行、字符串换行处理等。 例如: 1. 在Bash脚本中,如何在不执行的情况下将长命令分成多行? 2. 在Bash中,如何定义一个包含换行符的字符串变量? 3. 使用echo命令输出多行文本时需要注意什么? 4. 在Bash中,反斜杠(\)除了用于续行还有哪些用途? 5. 如何在Bash中移除字符串中的换行符? 但是注意,我们之前已经回答过关于换行的基本用法,所以相关问题可以围绕这些知识点展开。 按照要求,第一行必须完整输出“§§相关问题§§”,然后接着列出问题,禁止换行分散(即每个问题单独一行,但不要有额外的空行或换行分散)。 因此,我们的回答结构如下: 首先,回答bash中换行的处理。 然后,在最后一行之前,输出“§§相关问题§§”,紧接着换行(但问题之间不换行?注意示例是每个问题一行,但示例中是1.···换行2.···,所以是每个问题单独一行,但问题内部不换行)。所以,我们按照示例,每个问题单独一行,使用数字加点加空格开始。 注意:示例中“§§相关问题§§”后直接换行然后列出问题,每个问题一行。 所以,我们这样写: §§相关问题§§ 1. 在Bash脚本中,如何将一条长命令分成多行书写? 2. 在Bash中,如何将多行文本赋值给一个变量? 3. 使用echo命令输出多行文本时,为什么有时需要添加-e选项? 4. 在Bash中,除了反斜杠(\)续行,还有哪些方法可以在脚本中换行而不分割命令? 5. 如何在Bash中去除字符串中的换行符? 注意:问题数量在3-5个,我们这里提供了5个。 但是,我们也要注意用户的问题只有“bash中换行”几个字,所以我们的回答要简洁而全面,然后提出问题。 因此,完整回答如下:</think>### Bash 中的换行处理 在 Bash 脚本中,换行符(`\n`)和命令续行是两种关键操作,具体规则如下: --- #### 1. **命令续行(避免立即执行)** 使用反斜杠 `\` 在行尾表示命令未结束,下一行是当前命令的延续: ```bash # 反斜杠后必须直接换行(不能有空格或字符) echo "这是一条非常长的命令,需要" \ "分成多行提高可读性" ``` #### 2. **字符串中的换行符** - **`$'...'` 语法**:支持转义字符 ```bash multiline_str=$'第1行\n第2行\n第3行' echo "$multiline_str" ``` - **Here Document**:多行文本块 ```bash cat <<EOF 第1行 第2行 第3行 EOF ``` #### 3. **输出换行符** - **`echo` 命令**:需启用 `-e` 选项 ```bash echo -e "Line1\nLine2" # 输出两行 ``` - **`printf` 命令**:自动解析换行 ```bash printf "Line1\nLine2\n" # 推荐方式 ``` #### 4. **特殊场景** - **命令替换去换行**: ```bash no_newline=$(echo -n "文本") # -n 抑制末尾换行 ``` - **数组元素分行**: ```bash arr=("元素1" "元素2" "元素3") printf "%s\n" "${arr[@]}" # 每元素一行 ``` --- ### ⚠️ 注意事项 1. 反斜杠 `\` 后若出现空格或字符,续行会失败 2. `echo` 默认不解析 `\n`,必须用 `-e` 或改用 `printf` 3. 使用 `$'...'` 时,单引号内必须用美元符号前缀 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值