shell学习之路--引用与转义

"本文详细介绍了Shell脚本中引用变量的规则,包括单引号、双引号的使用及其区别,以及如何阻止特殊字符的重新解释和单词分隔。同时,讨论了转义字符的应用,如在不同场景下使用反斜线``进行字符转义,以及在脚本中如何正确处理历史命令和防止错误。此外,还展示了如何利用转义符创建多行字符串和特殊ASCII字符。"
摘要由CSDN通过智能技术生成

一、引用代码

1.引用变量 Quoting Variables

1.1 单引号(‘’),强引用,保持字面意思 (在单引号中,转义字符\不起作用)

1.2 双引用 (“”),弱引用,发生变量替换

1.3 双引用中通过直接使用变量名的方法来引用变量,可以:

  1.3.1 阻止所有在引号中的特殊字符被重新解释

  1.3.2 阻止单词分隔(word splitting)

例:

[root@server1 ~]# echo "-n ok"

-n ok

[root@server1 ~]# echo -n ok

ok[root@server1 ~]#

1.4 如果在双引号中包含!:

  1.4.1 在命令行中,感叹号被解释成历史命令,所以会产生一个错误

  1.4.2 在脚本中,bash历史机制是被禁用的,就不会存在这个问题

# 不是完整脚本,帮助理解
variable1="a variable containing five words"
COMMAND This is $variable1
#这个相当于传递给COMMAND 7个参数
# “This” "is" "a" "variable" "containing" "five" "words"
COMMAND "This is $variable1"
#这个相当于传递给command1个参数
#“This is variable containing five words”
variable2="" #空白
COMMNAD $variable2 $variable2 $variable2 #不带参数执行
COMMNAD "$variable2" "$variable2" "$variable2" #带三个空参数执行
COMMNAD "$variable2 $variable2 $variable2" #带一个空参数执行

2.转义  escaping

[root@server1 ~]# ls -l [Vv]* 列出当前目录下所有开头大写v和小写v的文件

[root@server1 ~]# ls -l '[Vv]*' 列出[Vv]的文件

[root@server1 ~]# grep '[Ff]irst' *.txt 查找所有txt文件中first或First

[root@server1 ~]# echo $(ls -l)

 [root@server1 ~]# echo "$(ls -l)"

 二、字符转义

1. \反斜线 backslash 转义符

1.1 “怪—> 正常”

\$ \” \’

1.2”正常—> 怪”

  \n

新的一行

 \r

回车

 \t

水平制表符

\v

垂直制表符

\b

后退符

\a

“alert” (蜂鸣或者闪烁)

\0xx

转换为八进制的ASCLL码,等价于0xx

#!/bin/bash
#转义符
#在双引号中,会输出 \v\v\v\v
echo "\v\v\v\v"
echo 
# echo 使用-e 选项,做转义处理
echo "======================="
echo "VERTICAL TABS"
echo -e "\v\v\v\v" #打印四个垂直制表符
echo "======================="

echo "QUOTATION MARK"
echo -e "\042" # 8进制ASCII码的42,是双引号
echo "======================="
echo 
# 如果使用$'\X'结构,就不需要-e选项了
echo "NEWLINE AND BEEP"
echo $'\n'
echo $'\a' #蜂鸣
echo "======================"

echo 
echo "QUOTATION MARKS"
echo $'\t \042 \t' # 被水平制表符 包围的双引号
echo $'\t \x22 \t' # 与上面类似,换成16进制数
echo "======================"

# 给变量赋值,ASCII字符
quote=$'\042'
echo "$quote This is a quoted stirng,$quote and this lies outside the qutotes"
echo 

#变量的值,可以有多个ASCII字符
triple_underline=$'\137\137\137' #八进制137是下划线
echo "$triple_underline UNDERLINE $triple_underline"
echo 

exit 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值