Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
qingfeng
V2EX  ›  Linux

如何判断shell的函数参数是带0个1个或两个'-'符号

  •  
  •   qingfeng · Oct 16, 2013 · 3807 views
    This topic created in 4616 days ago, the information mentioned may be changed or developed.
    如何判断shell的函数参数是带0个1个或两个'-'符号,比如:

    function test() {
    if [ $1 == "" ]; then
    do something;
    fi
    }

    如果要让函数接受 x -x --x 这三种形式都可以工作,这个参数判断应该怎么写啊?求指教
    7 replies    1970-01-01 08:00:00 +08:00
    gastlygem
        1
    gastlygem  
       Oct 16, 2013
    如果需求很简单的话用这个应该就行:
    if [ $1 == "x" ] || [ $1 == "-x" ] || [ $1 == "--x" ]

    正经的复杂参数处理应该使用getopts,详细用法需要查查文档。

    个人觉得用得最爽的还是Python加命令行处理库argparse或者别的啥。
    lululau
        2
    lululau  
       Oct 16, 2013
    getopts 功能太简单,不支持长选项, getopt 命令可移植性又不好,所以我觉得像包含了长选项等等比较复杂的命令行选项处理的话,直接交给 ruby/python 等脚本语言来处理吧,别用 shell 写了
    hitsmaxft
        3
    hitsmaxft  
       Oct 16, 2013
    ARG_NUM="${#@[@]}"
    hitsmaxft
        4
    hitsmaxft  
       Oct 16, 2013
    如果是要涉及到统计 -xx 的个数,顺手写了个工具函数

    function test () {
    count=0 ;
    for arg in "${@[@]}" ; do
    [[ "$arg" != "${arg#-}" ]] && count=$(( $count +1))
    done
    echo $count
    }
    yboren
        5
    yboren  
       Oct 16, 2013
    getopt或者getopt_long
    vicence
        6
    vicence  
       Oct 16, 2013
    @hitsmaxft 在学shell脚本,你写的我看晕了
    yegle
        7
    yegle  
       Oct 17, 2013
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1233 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 17:48 · PVG 01:48 · LAX 10:48 · JFK 13:48
    ♥ Do have faith in what you're doing.