zoukankan      html  css  js  c++  java
  • shell参数中的特殊字符

    这两天闲着,玩一下NB,从Shell下手,碰到点有意思的,顺便记下。

    写了个简单的脚本test_2,输出用户的参数:
    #!/bin/sh
    if [ $# -lt 2 ] ; then
     echo "You need 2 paramerters at less!"
     exit 0
    fi
    ONE="$1"
    TWO="$2"
    echo "Your paramerters are:"
    echo $1
    echo $2

    :wq保存;
    chmod +x test_2 使其可执行

    发现了一点有趣的,不同参数的执行结果:
    (1)无参数:
    #./test_2
    You need 2 paramerters at less!

    (2)
    #./test_2 /43 ./#$@&
    #Your paramerters are:
    /43
    ./#

    ---------------------------------------------------------------
    没有出现提示符,似乎该命令还没有执行完
    /*
     *猜测可能是因为最后一个字符“&”有什么特别含义,暂不清楚
     */
    直接回车:
    [1] Done ./test_2 /43 ./#${@}


    (3)
    #./test_2 /43 ./#$@
    #Your paramerters are:
    /43
    ./#
    #

    ----------------------------------------------------------------
    和上次输出一样,不过出现命令提示符,说明命令已执行完毕


    (4)
    #./test_2 /43 ./#$
    #Your paramerters are:
    /43
    ./#$
    #

    ----------------------------------------------------------------
    好像是正常的输出,去掉一个“@”就正常了,奇怪。


    (5)
    #./test_2 /43 ./#
    #Your paramerters are:
    /43
    ./#
    #

    ----------------------------------------------------------------
    还是正常的。
    “./test_2 /43 ./” 与“./test_2 /43 .”均正常。


    (6)
    #./test_2 /43 ./#$&
    #Your paramerters are:
    /43
    ./#$

    -----------------------------------------------------------------
    一样没有出现提示符,“./test_2 /43 ./#$”则正常。似乎可以作此结论:“&”等待用户输入才能继续执行,至于要输入什么,不得而知。



    (7)
    #./test_2 /43 ./$@
    #Your paramerters are:
    /43
    ./
    #
    -----------------------------------------------------------------
    与情况(3)对比,似乎可以发现“$@”被忽略了。


    (8)
    #./test_2 /43 ./$4@
    #Your paramerters are:
    /43
    ./@
    #
    -----------------------------------------------------------------
    太奇怪了,头都大了。

    这东西,我估计是shell在传递参数时,对某些特殊字符做了处理,使它们不能直接作为参数,这也许很正常。我大概是没看源码,不知道规则,大惊小怪而已。

  • 相关阅读:
    上传图片,将图片保存在腾讯云(2种方式)
    由ping所引发的思考~
    php面试上机题(2018-3-3)
    【八】jqeury之click事件[添加及删除数据]
    【七】jquery之属性attr、 removeAttr、prop[全选全不选及反选]
    【六】jquery之HTML代码/文本/值[下拉列表框、多选框、单选框的选中]
    【五】jquery之事件(focus事件与blur事件)[提示语的出现及消失时机]
    小白懂算法之基数排序
    mysql_sql199语法介绍
    Python基本编程快速入门
  • 原文地址:https://www.cnblogs.com/chutianyao/p/1308320.html
Copyright © 2011-2022 走看看