shell编程之脚本参数$@,$*,$#,$$,$?的含义
#首先按顺序解释各个参数的含义
1.$0 表示脚本的文件名,
具体的路径信息和执行命令时的相对位置有关,例如
sakura@mi-OptiPlex-7050:~/sh$ sh args.sh
args.sh
sakura@mi-OptiPlex-7050:~$ sh sh/args.sh
sh/args.sh
2.$1,$2,... 表示具体的参数
3.$# 实际传入的参数的个数
4.$$ 执行当前shell的进程pid
5.$? 上次执行的返回值,一般0表示成功.
#关于$@,$*,"$@","$*"的对比和及向java传参的对比
首先$@,$*都表示shell脚本接受的参数列表,不包括$0
其次"$@"中的""表示弱引用,即会对$后的变量进行替换.
通过以下shell脚本和java代码,可以清晰的看清楚四者的区别
echo '------------------$@-------------------'
echo $@
for arg in $@
do
echo -n "$arg,"
done
echo
java Test $@
echo '------------------$*-------------------'
echo $*
for arg in $*
do
echo -n "$arg,"
done
echo
java Test $*
echo '------------------"$@"-------------------'
echo "$@"
for arg in "$@"
do
echo -n "$arg,"
done
echo
java Test "$@"
echo '------------------"$*"-------------------'
echo "$*"
for arg in "$*"
do
echo -n "$arg,"
done
echo
java Test "$*"
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
System.out.println("java arg length: "+args.length);
System.out.println("java arr: "+Arrays.toString(args));
}
}
执行 sh test.sh 1 ab 3,输出如下
------------------$@-------------------
1 ab 3
1,ab,3,
java arg length: 3
java arr: [1, ab, 3]
------------------$*-------------------
1 ab 3
1,ab,3,
java arg length: 3
java arr: [1, ab, 3]
------------------"$@"-------------------
1 ab 3
1,ab,3,
java arg length: 3
java arr: [1, ab, 3]
------------------"$*"-------------------
1 ab 3
1 ab 3,
java arg length: 1
java arr: [1 ab 3]
执行sh test.sh 输入如下
------------------$@-------------------
java arg length: 0
java arr: []
------------------$*-------------------
java arg length: 0
java arr: []
------------------"$@"-------------------
java arg length: 0
java arr: []
------------------"$*"-------------------
,
java arg length: 1
java arr: []
结论
$*,$@一样,都是传递整个参数列表,但是当被""引用时,$@不变,为多个字符串,而$*为一个字符串,并且如果这个参数列表为空,则字符串为空字符串,而非不存在.
随机推荐
- Android空包签名
空包签名 搜狗.优亿等Android市场,上传应用需要提供一个与要上传的应用相同签名的空包.这个空包是相应官方市场提供的,下载好之后需要使用命令行进行签名.具命令如下: 1 jarsigner -ve ...
- 空间数据导入Oracle数据库备忘
- Go基础学习(二)
数组[array] 数组定义[定义后长度不可变] 12 symbol := [...]string{USD: "$", EUR: "€", GBP: " ...
- 能源科技,苹果和Google的新圣战?
细心的果粉可能会注意到,最新版本的IOS软体中,增加了一个不起眼的按钮,它是一款署名为"家庭"的App,之所以说它不起眼,是因为它好像真得没什么用,活跃率恐怕不及Wechat的万分 ...
- ubuntu 18.04门等字不正常
sudo vim /etc/fonts/conf.d/64-language-selector-prefer.conf 该文件配置了 Noto Sans CJK 的优先级.i进入编辑后,可以看到,JP ...
- 一篇文章彻底说清JS的深拷贝/浅拷贝
一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...
- 【Amaple教程】6. 路由配置
在 第1节<启动路由> 章节中为了能让单页应用顺利跑起来,我们提前介绍了简单的路由配置方法.我们已了解路由配置的目的是指定不同的url下对应的 模块节点(也叫做模块容器)内应该显示哪个模块 ...
- A. New Building for SIS Codeforce
You are looking at the floor plan of the Summer Informatics School's new building. You were tasked w ...
- linux firewalld 防火墙操作命令
查看防火墙的状态systemctl status firewalldTomcat默认使用8080端口,如果防火墙开启,需要开通8080端口firewall-cmd --zone=public --ad ...
- 为什么你学习了scrum之后还不会实施敏捷? (敏捷学习之旅一)
标题党, 其实这个主题改为"如何能快速的学习与实施敏捷"更贴切. 我在一家大型的外资金融企业,公司最近在大面积的实施敏捷转型,我的团队首先被选为试点团队,并实施得很好,最近我也和不 ...