代码之家  ›  专栏  ›  技术社区  ›  nicoulaj

shell脚本中的$@和$*有什么区别?

  •  50
  • nicoulaj  · 技术社区  · 16 年前

    在shell脚本中, $@ $* ?

    哪个是获取脚本参数的首选方法?

    不同的shell解释器在这方面有区别吗?

    3 回复  |  直到 7 年前
        1
  •  58
  •   Community Mohan Dere    9 年前

    here :

    $@的行为与$*类似,只是在引用参数时,如果参数中有空格,则它们会被正确分解。

    以这个脚本为例(取自链接的答案):

    for var in "$@"
    do
        echo "$var"
    done
    

    给出:

    $ sh test.sh 1 2 '3 4'
    1
    2
    3 4
    

    现在改变 "$@" $* :

    for var in $*
    do
        echo "$var"
    done
    

    你会发现:

    $ sh test.sh 1 2 '3 4'
    1
    2
    3
    4
    

    (通过使用找到答案 Google )

        2
  •  12
  •   Art Swri    13 年前

    钥匙 与我的POV不同的是“$@”保留了原始号码 关于争论。是那个 只有 是的。因为这个原因 在脚本中传递参数非常方便。

    例如,如果“我的脚本”文件包含:

    #!/bin/bash
    
    main()
    {
       echo 'MAIN sees ' $# ' args'
    }
    
    main $*
    main $@
    
    main "$*"
    main "$@"
    
    ### end ###
    

    我这样运行它:

    my_script 'a b c' d e
    

    我会得到这个输出:

    主视图5个参数

    主视图5个参数

    主视图1个参数

    主视图3个参数

        3
  •  0
  •   Gavin H    16 年前

    每个参数都是带引号的字符串。否则它的行为也一样。

    见: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF