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

  • 相关阅读:
    HTML_严格模式与混杂模式
    不要和一种编程语言厮守终生:为工作正确选择(转)
    iOS开发编码建议与编程经验(转)
    UTF-8 和 GBK 的 NSString 相互转化的方法
    UICollectionView 总结
    UIViewController的生命周期及iOS程序执行顺序
    objective-c 中随机数的用法
    clipsToBounds 与 masksToBounds 的区别与联系
    网络请求 代码 系统自带类源码
    iOS CGRectGetMaxX/Y 使用
  • 原文地址:https://www.cnblogs.com/qiangshangkeji/p/14013122.html
Copyright © 2011-2022 走看看