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

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

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

两段代码的输出都是

   

第二段代码

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

输出结果:

      

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

<space><space><space><space><space>

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

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

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

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

./script   

其echo $*的输出是

  

接下来看如下的代码

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

其输出为

&&&&&&

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

现在在终端运行

./script
IFS='&'
echo $*
echo "$*"

其输出是

&&&

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

最新文章

  1. 【nodejs笔记2】认识express框架
  2. HTTP 源码解读
  3. AE调用GP工具的方法(转)
  4. ios控制器生命周期详解
  5. zedboard如何从PL端控制DDR读写(七)
  6. leetcode@ [208] Implement Trie (Prefix Tree)
  7. WINDOWS批处理命令使用大全
  8. 玩转指针(Playing with Pointers)
  9. Java线程编程中isAlive()和join()的使用详解
  10. 【原创】大叔经验分享(10)Could not transfer artifact org.apache.maven:maven. from/to central. Received fatal alert: protocol_version
  11. Hibernate(十四)抓取策略
  12. 6.03-news_xpath2
  13. 【规范】前端编码规范——html 规范
  14. 为什么不应该使用Zookeeper做服务发现?(转载)
  15. mysql 5.7.21 主从集群恢复GTID方式(不锁库)
  16. 什么是IO多路复用?Nginx的处理机制
  17. No result defined for action com.nynt.action.ManageAction and result input问题
  18. nginx 学习笔记(5) nginx调试日志
  19. 2017萧山第5场(2016 Pacific Northwest - Division 1)
  20. Vue组件库

热门文章

  1. SpringBoot JDBC/AOP
  2. symbol lookup error *** , undefined symbol 错误
  3. 事件驱动与异步IO--待更新
  4. 用Matlab对数据进行线性拟合算法
  5. [TJOI2013]最长上升子序列 平衡树
  6. 纯CSS实现的风车转动效果特效演示
  7. [zabbix]zabbix分区表操作步骤
  8. stout代码分析之五:UUID类
  9. bzoj 4414 数量积 结论题
  10. 游戏编程入门之Bomb Catcher游戏