zoukankan      html  css  js  c++  java
  • shell脚本中的结束符和引号

    1.关于结束符

    单行若为一个独立语句,加或不加结束符都可以,一般使用分号';'作为结束符。

    单行若为多个语句,那么必须加入分号“;”作为各个语句的分割符号。

    下面案例均为正确写法:

    案例1:

    #!/bin/bash
    girl2='王丹';echo "see ${girl2}";

    案例2:

    #!/bin/bash
    girl2='王丹';

    echo "see ${girl2}";

    案例3:

    #!/bin/bash
    girl2='王丹'

    echo "see ${girl2}"

    2.关于引号

    单引号中字符全部认为是字符串,即不识别$符号,不能引用变量。

    双引号作为功能引号,内部的$符号被解析为变量引用符号,即双引号内部可以引用变量。

    反引号(即键盘上tab按钮上面的符号),内部代码被shell解析器解析为linux命令行代码来执行,然后将返回的数据替换为当前反引号及其内部的内容部分。一般反引号内部的命令实际在linux命令窗口执行时返回什么值,则就直接将这些值放到当前shell脚本对应位置,即不会对返回值外加引号等,不重新进行封装。

    如果一个字符串直接出现在脚本文件中,没有带任何引号,那么shell解析器将尽量将其解析为一个适合他所在位置的格式,不报错,如echo hello,echo被解析为关键字,hello被解析为字符串,通常此类情况不是被解析为关键字就是被解析为字符串。

    案例:分析:可以看到for循环后面的in,in后面有至少4个参数,其中’列表结束‘ok‘等不带任何引号,被解析为字符串, `ls /root`的返回值因为是多个用空格分开的文件名,因为在in结构中,会认为是in的多个参数处理,这些文件名都不带引号,因此被认为是字符串处理(此处被解析为字符串更合适,如果某个文件名字为echo,与关键字重名,那么此处为了不报错,那么仍然解析为字符串)。

    #!/bin/bash
    for str in '下面是/root目录的文件列表:' `ls /root` 列表结束 ok
    do
        echo $str
    done
    :<<block
    文件执行后输出:
    [root@iZ25ja2kaemZ sbin]# ./test.sh
    下面是/root目录的文件列表:
    15.12.22.sql
    20fuwuqi.sql
    Amis
    apache
    apr-1.5.2
    apr-1.5.2.tar.gz
    apr-1.5.2.tar.gz.1
    apr-util-1.5.4
    apr-util-1.5.4.tar.gz
    download.zip
    EOF
    httpd-2.4.17
    install
    mysql-5.7.10
    mysql-5.7.10-linux-glibc2.5-x86_64
    mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz
    mysql_li
    mysq.tar.gz
    pcre-8.38
    pcre-8.38.zip
    php5.6.18
    php5.6.18.tar.gz
    php7.0.1
    php7.0.1.tar.gz
    php7.0.1test
    [root@iZ25ja2kaemZ
    [root@localhost
    列表结束
    ok
    block

  • 相关阅读:
    SVN服务器搭建和使用(三)
    SVN服务器搭建和使用(二)
    SVN服务器搭建和使用(一)
    mysql和oracle分页
    Windows许可证 即将过期
    Java 设计模式学习笔记1——策略模式(Duck例子)
    java 抽象类与接口
    java servlet练习测试
    windows 添加开始菜单
    visio连接线设置
  • 原文地址:https://www.cnblogs.com/qiangshangkeji/p/14013122.html
Copyright © 2011-2022 走看看