• shell基础(3):编程基础之转义、引用(部分引用、全引用、命令替换)、运算符


    本文介绍:
    转义:引用的一种:可以消除元字符的特殊含义
    了解引用:部分引用:保留原生的字符形式;全引用:消除元字符的作用
    命令替换:可以将命令的标准输出作为值赋给某个变量。命令输出赋值:$()、变量输出:${}。

    一. 转义

    shell中有两类字符:普通字符、元字符:具有特殊含义,在使用时用作特殊功能,比如$。
    为了消除元字符的特殊含义,需要进行转义。

    转义:在元字符前面添加"\",反斜杠。

    #试图打印“$Dollar”字符串的错误演示
    [root@localhost ~]# echo $Dollar                 
    ---> 此处打印为空,因为Shell尝试打印出变量Dollar的值,但是这个变量并没有声明,所以打印空行#使用转义字符转义$字符
    [root@localhost ~]# echo \$Dollar
    $Dollar
    #更多的例子
    #打印乘号。如果不用转义符转义*号,则*号会作为一般的通配符使用,结果是将工作目录中的所有目录和文件名替换它
    [root@localhost ~]# echo 8 \* 8 =64
    8 * 8 =64
    #句子中含有引号。如果不用转义符转义'单引号,则Shell会等待出现另一个单引号才能结束echo进程
    [root@localhost ~]# echo john\'s cat
    john's cat
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

     

    二. 引用

    简介:

    引用是将字符串用某种符号括起来,以防止特殊字符被解析为其他意思。
    一共有四种引用符:双引号,单引号,反引号(`)和转义符(\)

    部分引用

    指使用双括号括起来的引用,其中$符,反引号(`),转义符\,仍然会被解析为特殊意义。

    bash-3.2$ VAR04="A   B   C"
    #直接打印变量时,输出内容只保留了每个字母间一个空格
    bash-3.2$ echo $VAR04
    A B C
    bash-3.2$ echo "$VAR04"
    A   B   C
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意:使用双引号扩起的输出内容和变量定义时的内容完全一致。

     

    全引用

    指单引号括起来的引用,单引号中任何字符都被当作普通字符,但是单引号中不能再使用单引号。

    [root@localhost ~]# echo '$VAR03'
    $VAR03
    
    • 1
    • 2

    如果全引用括起的字符串中还含有单引号,就会出现问题,因为Shell无法区分哪个单引号是引用的结束符。有以下两种方式解决

    [root@localhost ~]# echo 'It'\''s a dog'
    It's a dog
    [root@localhost ~]# echo "It's a dog"
    It's a dog
    
    • 1
    • 2
    • 3
    • 4

     

    三. 命令替换

    指将命令的标准输出作为值赋给某个变量。

    Shell中有两种方式可以完成命令替换,一种是反引号(`),一种是$(),使用例子如下:

    [root@tbds-10-1-0-38 log]# var_time=$(date)
    [root@tbds-10-1-0-38 log]# var_time=`date`
    #使用变量通过 ${变量名}
    [root@tbds-10-1-0-38 log]# echo ${var_time}
    Mon Oct 12 19:48:33 CST 2020
    
    • 1
    • 2
    • 3
    • 4
    • 5

    换行保留

    [root@tbds-10-1-0-38 log]# var_logs_name=$(ll)
    [root@tbds-10-1-0-38 log]# echo ${var_logs_name}
    total 90320 -rw-r--r-- 1 tbds tbds 61253302 Oct 12 19:57 application.log -rw-r--r-- 1 tbds tbds 0 Sep 26 00:29 audit.log -rw-r--r-- 1 tbds tbds 507 Oct 12 11:21 boot.log -rw-r--r-- 1 tbds tbds 1096 Sep 28 12:07 dataexploit.log -rw-r--r-- 1 tbds tbds 31199786 Oct 12 19:57 error.log drwxr-xr-x 4 tbds tbds 4096 Oct 2 00:00 history -rw-r--r-- 1 root hadoop 75 Oct 12 19:10 nameSpace1.sh -rw-r--r-- 1 root hadoop 130 Oct 12 19:25 nameSpace2.sh
    
    [root@tbds-10-1-0-38 log]# var_logs_name=$(ll)
    [root@tbds-10-1-0-38 log]# echo "${var_logs_name}"
    total 90320
    -rw-r--r-- 1 tbds tbds   61254541 Oct 12 19:57 application.log
    -rw-r--r-- 1 tbds tbds          0 Sep 26 00:29 audit.log
    -rw-r--r-- 1 tbds tbds        507 Oct 12 11:21 boot.log
    -rw-r--r-- 1 tbds tbds       1096 Sep 28 12:07 dataexploit.log
    -rw-r--r-- 1 tbds tbds   31199786 Oct 12 19:57 error.log
    drwxr-xr-x 4 tbds tbds       4096 Oct  2 00:00 history
    -rw-r--r-- 1 root hadoop       75 Oct 12 19:10 nameSpace1.sh
    -rw-r--r-- 1 root hadoop      130 Oct 12 19:25 nameSpace2.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

     

    嵌套使用

    $()支持嵌套,``:不支持嵌套。
    $()仅在bash shell中有效,反引号在多种UNIX Shell中都可使用

    lianggao@bogon Downloads % Fir_File_Lines=$(wc -l $(ls | sed -n '1p'))
    lianggao@bogon Downloads % echo ${Fir_File_Lines}
    352 capacity-scheduler.xml
    
    • 1
    • 2
    • 3

     

  • 相关阅读:
    K8s 部署 CNI 网络组件+k8s 多master集群部署+负载均衡
    Could not get a resource from the pool
    Node.js和cnpm环境搭建
    关于Git的入门教程(附GitHub和Gitee的使用方法)
    【SQL】查询优化|排序优化|group by优化|分页查询优化|覆盖索引
    (附源码)springboot自习室座位预约系统 毕业设计 674156
    时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限梯度提升树时间序列预测
    一次断网故障修复
    【右击打开cmd】
    RabbitMQ入门指南
  • 原文地址:https://blog.csdn.net/hiliang521/article/details/126699171