shell中的IFS和$*变量
本文转载自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和$*变量的更多相关文章
- shell中的IFS详解
在bash中IFS是内部的域分隔符,manual中对其的叙述如下:IFS The Internal Field Separator that is used for word splitting af ...
- Shell中的IFS
一.IFS 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.完整定义是The shell uses the value stored in ...
- 【转】SHELL中的IFS详解
转自:http://smilejay.com/2011/12/bash_ifs/ 在bash中IFS是内部的域分隔符,manual中对其的叙述如下: IFS The Internal Field Se ...
- 【转】shell中的$0 $n $# $* $@ $? $$ 变量 if case for while
shell中的$0 $n $# $* $@ $? $$ shell 编程 | shift 命令用法笔记 $0当前脚本的文件名 $n传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个 ...
- 【转】shell中如何判断一个变量是否为空
判断一个脚本中的变量是否为空,我写了一个这样的shell脚本: #!/bin/sh #filename: test.sh para1= if [ ! -n $para1 ]; then echo &q ...
- Linux shell中一些参数与变量简介
linux中shell变量$#,$@,$0,$1,$2,$!,$$,$*,$-,$@......等很多个,很容易记错,这里再次整理一下,相关含义解释如下,并附上一个实践截图. 多看几次,多用几次,应该 ...
- shell中if判断一个变量为空
1.最直接简单的判断 [ ! $a ] && echo "a is null" 不用那些if语句了,直接缩短代码量. 2. 变量通过" "引号引 ...
- shell中的数据生命周期scope
#!/bin/shexit 0#shell 中, 默认所有的变量都是 全局变量,除非主动变量前面加 local 修饰#shell 变量是字符变量,只能放字符和数字,shell数组也是如此;而数字也是图 ...
- 九 Shell中的数组
数组:用一个变量存储一组数据,并能够对这组数据中的某一个数据单独操作. 数组的类型:一维数组.二维数组.多维数组 变量的类型 Shell中默认无类型 变量的值默认均视为文本 用在数字运算中时,自动将其 ...
随机推荐
- Bootstrap 按钮,图片,辅助类
Bootstrap 按钮 任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观.但是 Bootstrap 提供了一些选项来定义按钮的样式,具体如下表所示: 以下样式可用于<a&g ...
- matlab中prod的使用方法
B = prod(A) 将A矩阵不同维的元素的乘积返回到矩阵B. 如果A是向量,prod(A)返回A向量的乘积.如果A是矩阵,prod(A)返回A每一列元素的乘积并组成一个行向量B. B = prod ...
- 【bzoj1707】[Usaco2007 Nov]tanning分配防晒霜 贪心+Treap
题目描述 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SPF值分别为mi ...
- C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库
using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...
- BZOJ4503 两个串 【fft】
题目链接 BZOJ4503 题解 水水题. 和残缺的字符串那题几乎是一样的 同样转化为多项式 同样TLE 同样要手写一下复数才A #include<algorithm> #include& ...
- Codeforces Round #341 (Div. 2)A
A. Wet Shark and Odd and Even time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- HDU4081:Qin Shi Huang's National Road System (任意两点间的最小瓶颈路)
Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- 【题解】互不侵犯 SCOI 2005 BZOJ 1087 插头dp
以前没学插头dp的时候觉得这题贼难,根本不会做,学了才发现原来是一裸题. 用二进制表示以前的格子的状态,0表示没放国王,1表示放了国王. 假设当前位置为(x,y),需要记录的是(x-1,y-1)至(x ...
- Moodle安装图解
Moodle安装图解 一. Moodle运行环境搭建 Moodle主要是在Linux上使用Apache, PostgreSQL/MySQL/MariaDB及 PHP 开发(LAMP平台). 1. ...
- HashMap详谈以及实现原理
(一).HashMap 基于哈希表的 Map 接口的实现 允许使用 null 值和 null 键 HashMap不是线程安全,想要线程安全,Collections类的静态方法synchronizedM ...