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

时间: 2024-08-25 18:48:06

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

Shell中的 IFS

一.IFS 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.完整定义是The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command sub

转 Shell中的IFS解惑

感谢whuslei Shell中的IFS解惑原创whuslei 最后发布于2012-01-09 21:07:15 阅读数 51963 收藏展开一.IFS 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.完整定义是The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit wo

Shell中的特殊位置参数变量全文收录

一.位置参数变量的作用 一句话概括:我们要从命令行.函数或者脚本执行等处传递参数时,就需要在shell脚本中使用位置参数变量 二.Shell中的特殊未知参数变量有哪些 1)$0 作用:获取当前执行的shell脚本的脚本名字(如果脚本中包含了路径,那获取的就是脚本路径)2)$n作用:获取当前执行的shell脚本的第n个参数(n=1..9),当n=0时,则就是$0获取脚本名,当n≥10,则必须使用{},例如:${10},当n有多个时,则参数之间用空格隔开3)$#作用:获取当前执行的shell脚本后面

Shell中的IFS

一.IFS 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.完整定义是The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command sub

[Tips] Shell中常用的环境变量

常用环境变量 HOME: 使用者的目录地址 BASH: 目前使用的shell HISTSIZE: 保留历史命令的数目上限 PATH:系统默认的可执行文件搜索路径 LANG:系统使用的编码.很多程序是根据系统指定的编码去解析输入文件,如果编码不正确,很多文件就无法正确解析. RANDOM:随机产生一个0~32767之间的随机数 PS1:即命令提示符的格式,就是shell命令行前方的图标. $:表示当前shell的pid $> echo $$ ?:上一个shell命令的返回值 OSTYPE:系统类型

shell中if判断一个变量为空

1.最直接简单的判断 [ ! $a ] && echo "a is null" 不用那些if语句了,直接缩短代码量. 2. 变量通过" "引号引起来 如下所示:,可以得到结果为 IS NULL. #!/bin/sh a= if [ ! -n "$a" ]; then echo "IS NULL" else echo "NOT NULL" fi 3. 直接通过变量判断 如下所示:得到的结果为:

shell中的特殊变量IFS

当我越来越习惯python的编写风格时,我经常会想用bash去遍历一个文件的行,并将读取的行进行处理. 但一个诡异的情况,如果我的文本类似于这样 the first line. the second line. the third line. for line in `cat filename` do echo $line done 当我通过上面的方式遍历文件的每一行,我发现读出来的数据是这样的: the first line. the second line. the third line.

20.16/20.17 shell中的函数20.18 shell中的数组20.19 告警系统需求分析

20.16/20.17 shell中的函数显示变量的隐函数执行的结果参数只有一个1,执行的结果 第一个是1,第二个是空的,第三个也是空的,肢本的名字是fun1.sh,总共有1个参数加法的函数显示IP的隐函数-A1是显示关键词的一行包括下一行精准查找到IP脚本就可以这样写,ip $eth 是输入一个网卡的名字#!/bin/baship() {ifconfig |grep -A1 "ens33: " |awk '/inet/ {print $2}'}read -p "Please

shell中的数据生命周期scope

#!/bin/shexit 0#shell 中, 默认所有的变量都是 全局变量,除非主动变量前面加 local 修饰#shell 变量是字符变量,只能放字符和数字,shell数组也是如此;而数字也是图形字符;总的来说,shell的变量是图形字符变量#变量,函数和系统命令可以同名,先搜索脚本后系统环境 #子进程拥有父进程的环境副本,但不能影响父进程的环境;子进程能对父进程的环境有读权限.写的时候,只是在自己的副本中生效,一种写时复制的形式;脚本都是进程,函数不是;#函数完全共享调用者的环境,并且能