shell script中的$*和$@
在shell script中,$*和$@都是获取所有的命令行参数,但是这两者在使用的过程中会有细微的差别,差别主要是在有没有使用双引号,即是直接使用$*,$@,还是使用"$*","$@"。
直接使用$*,$@
#!/bin/bash count=
for param in $*;do
echo "\$* Parameter #$count = $param"
count=$[ $count + ]
done count=
for param in $@;do
echo "\$@ Parameter #$count = $param"
count = $[ $count + ]
done
如果执行该脚本,并且输入a b c d命令行参数,那么使用$*和$@的for循环输出都是一样的:

原因是shell进行参数替换后,两个for循环是一样的,下面是进行参数替换后脚本的形式:
#!/bin/bash count=
for param in a b c d;do
echo "\$* Parameter #$count = $param"
count=$[ $count + ]
done count=
for param in a b c d;do
echo "\$@ Parameter #$count = $param"
count = $[ $count + ]
done
使用双引号的"$*", "$@"
#!/bin/bash count=
for param in "$*";do
echo "\$* Parameter #$count = $param"
count=$[ $count + ]
done count=
for param in "$@";do
echo "\$@ Parameter #$count = $param"
count = $[ $count + ]
done
同样输入参数a b c d,运行结果如下:

原因是"$*"进行参数替换后成为"a b c d"(由环境变量IFS的第一个字符来分割它们),和普通的"$variable"没有什么区别,而"$@"进行参数替换后很特别,成为"a" "b" "c" "d"(由空格分割它们)。也就是说,"$*"被替换成"$1 $2 ... $N",而"$@"被替换成"$1" "$2" ... "$N",前者所有参数包围在双引号之内,被shell当成一个参数对待,双引号内部的参数仍然由空格分隔,后者每个参数单独被双引号包围,参数与参数之间由空格分隔。因此,该脚本被替换后的形式为:
#!/bin/bash count=
for param in "a b c d";do
echo "\$* Parameter #$count = $param"
count=$[ $count + ]
done count=
for param in "a" "b" "c" "d";do
echo "\$@ Parameter #$count = $param"
count = $[ $count + ]
done
shell script中的$*和$@的更多相关文章
- shell script中read的用法
1.read基本读取 #!/bin/bash #testing the read command echo -n "Enter you name:" #echo -n 让用户直接在 ...
- Pig 在 shell script中被调用,批量载入处理文件
首先,我想达到的目的是批量的处理一个目录下的的很多文档,这些文档保存了我要处理的数据,由于pig是初学..所以不知到该怎么批量的load,没有写过 自己的UDF,仅仅能一个一个文件的load,然后处理 ...
- 在shell script中进行数值运算的两种方法
方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...
- shell script入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Linux shell 脚本中变量的数学计算【转】
本文转载自:http://blog.csdn.net/qinghezhen/article/details/9194287 首先从一个例子说起: x=1+1 echo $x 你是不是期待着输出2啊?让 ...
- Linux 脚本运维总结之Shell script
1. 本地变量和环境变量 变量类型 定义形式 声明位置 显示命令 作用域 本地变量 VARNAME=value 命令行或shell脚本 set (显示所有变量) 本用户,本进程 环境变量 export ...
- 菜鸟教程之学习Shell script笔记(中)
菜鸟教程Shell script学习笔记(中) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...
- shell及脚本4——shell script
一.格式 1.1 开头 必须以 "# !/bin/bash" 开头,告诉系统这是一个bash shell脚本.注意#与!中间有空格. 二.语法 2.1 数值运算 可以用decla ...
- shell script
一.shell script的编写与执行 1.shell script 的编写中还需要用到下面的注意事项: a.命令的执行是从上到下,从左到右地分析与执行 b.命令.参数间的多个空白都会被忽略掉 c. ...
随机推荐
- web api 返回数据XML JSON
WEBAPI返回的数据格式一般是XML和JSON.能根据请求的要求返回.经过试验如下: public object Get(string uid) { return new {msg="成功 ...
- Redis使用(1)---安装
简介 Redis具体简介可以百度.它可以在Linux和Windows下运行,但官方只提供针对Linux的包,Windows对其也有自己的开发团队. redis官网:http://www.redis.i ...
- Win8 X64下JDK版本切换问题
1:现在笔记本上安装的是,执行java -version: 2:现在又安装了,想通过修改环境变量,使JDK切换到1.6版本上 JDK的安装目录:D:\Java\ 修改环境变量: (1)JAVA_HOM ...
- Oracle 安装时候的网络相关内核参数
http://www.cnblogs.com/gaojian/archive/2012/10/12/2721284.html http://blog.chinaunix.net/uid-2442641 ...
- 液晶顯示器 LCD (Liquid Crystal Disply )
常見的液晶顯示器按物理結構分為四種: (1)扭曲向列型(TN-Twisted Nematic): (2)超扭曲向列型(STN-Super TN): (3)雙層超扭曲向列型(DSTN-Dual Scan ...
- VS下 dllimport与dllexport作用与区别
我相信写WIN32程序的人,做过DLL,都会很清楚__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法.当然,如果你的DLL里全是C++的类的话 ...
- Android导航菜单横向左右滑动并和下方的控件实现联动
这个是美团网个人订单的效果,找了很多地方都没找到,自己研究了两天终于弄出来了^_^,有什么问题希望大家指出来,谢谢. 实现原理是上方使用HorizontalScrollView这个可以水平横向拖动的控 ...
- hmac_sha1 签名
use URI::Escape qw(uri_unescape); use MIME::Base64; use Digest::HMAC_SHA1; $str=Digest::HMAC_SHA1::h ...
- .net 分页案例效果
; ) { pageUrl += ) + && (totalPageCount > step ...
- POJ3261-哈希
这个题让求至少出现K次的最大长度的子串,属于最大化最小值问题,首先应该想到二分求字串的长度,二分的过程是O(logN)的,注意judge的时候怎样判断是否满足情况以及满足情况后l,r的变化.可以给每一 ...