#首先按顺序解释各个参数的含义

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: []

结论

$*,$@一样,都是传递整个参数列表,但是当被""引用时,$@不变,为多个字符串,而$*为一个字符串,并且如果这个参数列表为空,则字符串为空字符串,而非不存在.

随机推荐

  1. 悖论当道,模式成空:汽车O2O真是死得其所?

    O2O热潮的兴起似乎来得颇为蹊跷--或许是线上连接线下的模式太过空泛,具有极大的包容性,让各个行业都忍不住在其中横插一脚.在经历过最初的崛起和后来的火爆之后,最终形成目前的寒冬.究其原因,O2O并不是 ...

  2. 【h5ai】搭建服务器目录

    在前几天,我帮人安装h5ai这个东西,结果直接踩坑,装了一个下午,打算自己也装一个,顺便写一下教程 最终效果演示: https://larsjung.de/h5ai/demo/ 服务器 服务器这里推荐 ...

  3. 滑动表层div时 禁止底层滑动

    $(".container").bind("touchstart", function (events) { startX = events.originalE ...

  4. 从5个经典工作开始看语义SLAM

    本文试图概括Semantic SLAM的主要思路和近年工作,⻓期更新.但因水平有限,若有错漏,感谢指正. (更好的公式显示效果,可关注文章底部的公众号) Semantic SLAM 简介 至今为止,主 ...

  5. python如何在图片上添加文字(中文和英文)

    Python在图片上添加文字的两种方法:OpenCV和PIL 一.OpenCV方法 1.安装cv2 pip install opencv-python 2.利用putText方法来实现在图片的指定位置 ...

  6. 前端开发--Mongodb篇

    安装和启动 安装 官方安装文档 本地mac Os推荐使用Homebrew ⚠️ 目前直接使用--brew install mongodb-- 安装 mongodb 时提示:Error: No avai ...

  7. 浅谈JS之setTimeout与setInterval

    概念 setTimeout与clearTimeout,以及setInterval与clearInterval均属于Window对象方法. 方法 描述 setTimeout 在指定的毫秒数后调用函数或计 ...

  8. Design Patterns | 02 什么样的代码是好代码

    目录 01 - 什么是好的代码? 02 - 评价代码的标准有哪些 2.1 可维护性(maintainability) 2.2 可读性(readability) 2.3 可扩展性(extensibili ...

  9. 一文深入了解史上最强的Java堆内缓存框架Caffeine

    它提供了一个近乎最佳的命中率.从性能上秒杀其他一堆进程内缓存框架,Spring5更是为了它放弃了使用多年的GuavaCache 缓存,在我们的日常开发中用的非常多,是我们应对各种性能问题支持高并发的一 ...

  10. selenium基本对象之——数值型

    python的数值类型,除了魔法方法以为,只有下面的这些方法: 整形的方法有:as_integer_ratio.bit_length.from_bytes.to_bytes.conjugate.ima ...