zoukankan      html  css  js  c++  java
  • 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: []

    结论

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

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/lshao/p/10341778.html
Copyright © 2011-2022 走看看