本文转载自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 $*时,&代表分隔符,所以要转换成空格 ,而第二行由于""的作用使得&没有进行转换

shell中的IFS和$*变量的更多相关文章

  1. shell中的IFS详解

    在bash中IFS是内部的域分隔符,manual中对其的叙述如下:IFS The Internal Field Separator that is used for word splitting af ...

  2. Shell中的IFS

    一.IFS 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.完整定义是The shell uses the value stored in ...

  3. 【转】SHELL中的IFS详解

    转自:http://smilejay.com/2011/12/bash_ifs/ 在bash中IFS是内部的域分隔符,manual中对其的叙述如下: IFS The Internal Field Se ...

  4. 【转】shell中的$0 $n $# $* $@ $? $$ 变量 if case for while

    shell中的$0 $n $# $* $@ $? $$  shell 编程 | shift 命令用法笔记 $0当前脚本的文件名 $n传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个 ...

  5. 【转】shell中如何判断一个变量是否为空

    判断一个脚本中的变量是否为空,我写了一个这样的shell脚本: #!/bin/sh #filename: test.sh para1= if [ ! -n $para1 ]; then echo &q ...

  6. Linux shell中一些参数与变量简介

    linux中shell变量$#,$@,$0,$1,$2,$!,$$,$*,$-,$@......等很多个,很容易记错,这里再次整理一下,相关含义解释如下,并附上一个实践截图. 多看几次,多用几次,应该 ...

  7. shell中if判断一个变量为空

    1.最直接简单的判断 [ ! $a ] && echo "a is null" 不用那些if语句了,直接缩短代码量. 2. 变量通过" "引号引 ...

  8. shell中的数据生命周期scope

    #!/bin/shexit 0#shell 中, 默认所有的变量都是 全局变量,除非主动变量前面加 local 修饰#shell 变量是字符变量,只能放字符和数字,shell数组也是如此;而数字也是图 ...

  9. 九 Shell中的数组

    数组:用一个变量存储一组数据,并能够对这组数据中的某一个数据单独操作. 数组的类型:一维数组.二维数组.多维数组 变量的类型 Shell中默认无类型 变量的值默认均视为文本 用在数字运算中时,自动将其 ...

随机推荐

  1. java获取时间整点工具代码

    /**获取上n个小时整点小时时间 * @param date * @return */ public static String getLastHourTime(Date date,int n){ C ...

  2. CentOS httpd服务(Apache)

    1.从ISO镜像安装,Apache 服务的软件包名称为 httpd #检查源配置[root@localhost media]# cat /etc/yum.repos.d/CentOS-Media.re ...

  3. 【题解】洛谷P4735最大异或和

    学习了一下可持久化trie的有关姿势~其实还挺好理解的,代码也短小精悍.重点在于查询某个历史版本的trie树上的某条边是否存在,同样我们转化到维护前缀和来实现.同可持久化线段树一样,我们为了节省空间继 ...

  4. [CTSC2014]企鹅QQ hash

    ~~~题面~~~ 题解: 通过观察可以发现,其实题目就是要求长度相等的字符串中有且只有1位字符不同的 ”字符串对“ 有多少. 因为数据范围不大, 所以考虑一种暴力至极的方法. 我们枚举是哪一位不同,然 ...

  5. 【BZOJ1941】Hide and Seek(KD-Tree)

    [BZOJ1941]Hide and Seek(KD-Tree) 题面 BZOJ 洛谷 题解 \(KD-Tree\)对于每个点搜一下最近点和最远点就好了 #include<iostream> ...

  6. BZOJ1076:[SCOI2008]奖励关——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1076 https://www.luogu.org/problemnew/show/P2473 你正在 ...

  7. 牛客网 Wannafly挑战赛27 蓝魔法师

    蓝魔法师 链接: https://www.nowcoder.com/acm/contest/215/C 来源:牛客网 题目描述 "你,你认错人了.我真的,真的不是食人魔."--蓝魔 ...

  8. webpack开发模式和生产模式设置及不同环境脚本执行

    1. webpack设置开发模式和生产模式 (1). DefinePlugin插件设置 new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '& ...

  9. 关于JavaScript的push()函数

    push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度.返回值为把指定的值添加到数组后的新长度. 语法:arrayObject.push(newelement1,newelement2,. ...

  10. ACE线程管理机制-并发控制(3)

    转载于:http://www.cnblogs.com/TianFang/archive/2006/12/04/581854.html ACE Condition类属 ACE Condition类属(条 ...