shell中的IFS和$*变量
2024-08-27 18:21:28
本文转载自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 $*时,&代表分隔符,所以要转换成空格 ,而第二行由于""的作用使得&没有进行转换
最新文章
- 【nodejs笔记2】认识express框架
- HTTP 源码解读
- AE调用GP工具的方法(转)
- ios控制器生命周期详解
- zedboard如何从PL端控制DDR读写(七)
- leetcode@ [208] Implement Trie (Prefix Tree)
- WINDOWS批处理命令使用大全
- 玩转指针(Playing with Pointers)
- Java线程编程中isAlive()和join()的使用详解
- 【原创】大叔经验分享(10)Could not transfer artifact org.apache.maven:maven. from/to central. Received fatal alert: protocol_version
- Hibernate(十四)抓取策略
- 6.03-news_xpath2
- 【规范】前端编码规范——html 规范
- 为什么不应该使用Zookeeper做服务发现?(转载)
- mysql 5.7.21 主从集群恢复GTID方式(不锁库)
- 什么是IO多路复用?Nginx的处理机制
- No result defined for action com.nynt.action.ManageAction and result input问题
- nginx 学习笔记(5) nginx调试日志
- 2017萧山第5场(2016 Pacific Northwest - Division 1)
- Vue组件库