zoukankan      html  css  js  c++  java
  • shell中的IFS和$*变量

        本文转载自http://blog.chinaunix.net/uid-22566367-id-381955.html

        自我记录内容。在工程中遇到了相关内容的shell脚本。在此处记录

    STRING1="111 222 333 4444"
    echo $STRING1
    echo "$STRING1"

    两段代码的输出都是

    111 222 333 4444

    第二段代码

    STRING2="111 222  333   444"
    echo $STRING2
    echo "$STRING2"

    输出结果:

    111 222 333 444
    111 222  333   444

    其原因是IFS这个变量的缘故:IFS是shell内定的一个变量,默认定义的值为<space><tab><newline>3个,IFS的作用就是把字符串里面的某某字符(和它一样的字符,例如上面的<space>,<tab> <newline> 转义为分隔符,例如上述的字符串实际上为

    111<space>222<space>333<space><space><space>444

    由于IFS里面也有一个<spce>,所以在他眼中<space>就是分隔符,其把相邻的连续的分割符合并到了一起。而利用双引号包裹的字符串实际上是屏蔽了IFS的作用,当我做如下修改的时候那么输出就完全一致了

    IFS='&'
    STRING2="111 222  333   444"
    echo $STRING2
    echo "$STRING2"

    另外一个变量是$*,其指的是脚本入口参数的字符串集合。举例如下:

    在终端输入了一个命令,如下:

    ./script 111 222 333

    其echo $*的输出是

    111 222 333

    接下来看如下的代码

    IFS='&'
    STRING2="111&222&&333&&&444"
    echo $STRING2
    echo "$STRING2"

    其输出为

    111  222  333   444
    111&222&&333&&&444

    因为IFS='&',所以字符串里的&全成了分隔符,所以第一个输出的是111 222 333 444,后面还有一组代码。(另外注意并不是所有的分割符都会合并。其中比如空格space就会合并)

    现在在终端运行

    ./script 111 222  333   444
    IFS='&'
    echo $*
    echo "$*"

    其输出是

    111 222 333 444
    111&222&333&444

    因为$*等于111IFS222IFS333IFS444,亦等于111&222&333&444,由于echo $*时,&代表分隔符,所以要转换成空格 ,而第二行由于""的作用使得&没有进行转换

  • 相关阅读:
    UVa 11538 Chess Queen (排列组合计数)
    CodeForces 730H Delete Them (暴力)
    CodeForces 730G Car Repair Shop (暴力)
    汇编(assembling)简介(源:阮一峰)
    CSS骚操作
    Jquery复习总结
    CGI与ISAPI的区别(转)
    SQL中Group By的使用(转)
    05 ADO.net
    04 SqlServer
  • 原文地址:https://www.cnblogs.com/Commence/p/7470354.html
Copyright © 2011-2022 走看看