本文转载自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. SQL局部变量

    声明局部变量 局部变量的声明需要使用declare 语句.并且必须以@开头 declare { @varaible_name datatype[,...n] } varaible_name :局部变量 ...

  2. WPF一个对象显示多个属性

    一个对象显示多个属性使用模板的方法: 如图: <dataTemplate x:key="MyDataTemplate">

  3. 判断IP地址是否在指定范围内的方法

    比如给定一个ip段:127.0.0.1 ~ 127.0.0.255,我们想判断一个给定的ip地址是否在此段内,可以先将ip地址转换成整数,然后整数比较大小就很容易了. 例如: 127.0.0.1 = ...

  4. bzoj2257[POI2011]Programming Contest

    首先可以费用流建图,左边一堆点表示人,右边一堆点表示题,源点向每个人连floor(t/r)条边,费用依次为r,2r,3r….然后写了一个卡不过去,动态加边也卡不过去,然后我想:这里一定有一些不为人知的 ...

  5. PCA误差

    我们知道,PCA是用于对数据做降维的,我们一般用PCA把m维的数据降到k维(k < m). 那么问题来了,k取值多少才合适呢? PCA误差 PCA的原理是,为了将数据从n维降低到k维,需要找到k ...

  6. POJ1201:Intervals(差分约束)

    差分约束经典题.设s[i]为前缀和,则有 s[i]-s[i-1]<=1 (i往i-1连-1的边) s[i]>=s[i-1] (i-1往i连0的边) s[b]-s[a-1]>=c (a ...

  7. halcon程序输出成c++程序

    halcon语法程序: dev_open_window (0, 300, -1, -1, 'black', WindowID) read_image (Die4, 'C:/Users/Public/D ...

  8. HDU 4529 状压dp

    郑厂长系列故事——N骑士问题 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  9. kvm增加硬盘挂载

    1.查询需要添加虚拟主机 [root@sz-kvm-110 images]# virsh list --all  Id    名称                         状态 ------- ...

  10. 51Nod 1062 序列中最大的数 | 简单DP

    #include "iostream" #include "cstdio" using namespace std; #define LL long long ...