前言

Shell编程中,不仅会是使用变量,还经常会使用$\、单引号、双引号、反引号等符号。

这些符号在使用中,有时候难免混乱,所以整理此文,便于学习,希望对你有用

一. 符号的介绍与对比

如下为几种符号简单区别对比:

  • 美元符号 $,主要用于引用变量值,例如定义变量MXS=moxiaosheng,引用时,需要用 $MXS;
  • \反斜杠,主要是用于对特定的字符实现转义,保留原有意义,例如echo “\$MXS”结果会打印$MXS,而不会打印moxiaosheng
  • 单引号' ',单引号又称为强引,不具有变量置换的功能,所有的任意字符还原为字面意义,实现屏蔽Shell元字符的功能;
  • 双引号" ",双引号又称为弱引,具有变量置换的功能,保留$(使用变量前导符), \(转义符), `(反向引号)元字符的功能;
  • 反向引号``,反引号,位于键盘Tab键上面一行的键,用作命令替换(相当于$(…))。

二. 单引号和双引号的区别

在shell中,单引号(')和双引号(")在处理字符串时有以下区别:

2.1. 变量展开:

  • 单引号字符串中的变量不会被展开,将原样输出。例如,echo ‘Hello $name’ 输出结果为 “Hello $name”。
  • 双引号字符串中的变量会被展开为其对应的值。例如,echo “Hello $name”,如果变量 name 的值为 “Alice”,则输出结果为 “Hello Alice”。
#!/bin/bash

name="Alice"

# 单引号字符串中的变量不会展开
echo 'Hello $name'  # 输出结果为 "Hello $name"

# 双引号字符串中的变量会展开
echo "Hello $name"  # 输出结果为 "Hello Alice"

2.2 命令替换

  • 单引号字符串中的命令替换不会被执行,命令将原样输出。例如,echo ‘Today is $(date)’ 输出结果为 “Today is $(date)”。
  • 双引号字符串中的命令替换会被执行,并将命令的输出结果插入字符串中。例如,echo “Today is $(date)” 将执行命令 “date” 并将输出日期插入字符串中。

2.3 转义字符的处理

  • 在单引号字符串中,转义字符(例如 \n、\t)仅被视为普通字符,不会被特殊处理。
  • 在双引号字符串中,转义字符会被解释,并按照其含义进行替换。例如,echo “Hello\tWorld” 输出结果为 “Hello World”,其中 \t 被解释为制表符。

2.4 引号的嵌套

  • 单引号字符串中可以包含双引号,双引号字符串中可以包含单引号。例如,echo ‘He said, “Hello”’ 和 echo “It’s a nice day” 都是合法的。

只要记住一点就行了: 单引号一般会保留原样输出。

三. 转义符

3.1 转义符的概念

转义符在shell脚本中用于解决特殊字符的处理问题。当需要在字符串中插入具有特殊含义的字符时,可以使用转义符来取消其特殊含义,将其视为普通字符。

在shell脚本中,常见的转义符是反斜杠(\),其后跟着需要进行转义的字符。

3.2 常用的转义符

\n:换行符
\t:制表符
\":双引号
\':单引号
\\:反斜杠
\$:美元符号
```:反引号

3.3 使用案例

echo "This is a sentence with a newline.\nThis is on a new line."
echo "The price is \$10"  

这样可以输出$符号

使用脚本完成一个包含学生姓名和成绩的表格:

#!/bin/bash

# 表头
echo -e "姓名\t成绩"

# 学生数据
echo -e "Alice\t90"
echo -e "Bob\t85"
echo -e "Charlie\t92"
echo -e "David\t87"

输出结果:

姓名    成绩
Alice   90
Bob     85
Charlie 92
David   87

实现一个进度条:

#!/bin/bash

echo "执行命令:yum install mariadb"
echo "开始安装..."

# 安装命令(取消输出)
yum install -y mariadb --quiet &

# 监控安装进度
while :
do
    sleep 1
    echo -n "#"
    if yum list installed mariadb >/dev/null 2>&1; then
        break
    fi
done

echo ""
echo "安装完成"

使用yum install -y mariadb --quiet命令来安装mariadb软件包,并通过&运行它以启动后台安装过程。然后,使用while循环检查是否已经安装了mariadb软件包,如果安装完成则终止循环,并输出安装完成的消息。

安装时间仍然取决于多个因素。但使用实际的安装命令来监控进度会更接近实际情况,并且在安装完成后才会终止进度条。

总结

以上就是各类符号的使用方法,希望对你有用,我是沐风晓月, 我在csdn等你。

一文搞定Shell编程中的单引号、双引号、反引号和转义符的区别和使用-LMLPHP

06-21 12:35