• getopt vs getopts


    getopt示例
    #!/bin/bash
    aflag=no
    args=`getopt a: $@`
    
    if [ $? -ne 0 ]; then
        echo 'Usage: ...'
        exit 2
    fi
    
    set -- $args
    
    while [ $# -gt 0 ]
    do
        case "$1" in
        (-a) echo "-a was triggered, Parameter: $OPTARG" >&2;;
        (--) shift; non_option_arguments=$@; break;;
        (-*) echo "$0: error - unrecognized option $1" 1>&2; exit 1;;
        (*)  break;;
        esac
        shift
    done
    getopts示例
    #!/bin/bash
     
    while getopts ":a:" opt; do
      case $opt in
        a)
          echo "-a was triggered, Parameter: $OPTARG" >&2
          ;;
        ?)
          echo "Invalid option: -$OPTARG" >&2
          exit 1
          ;;
        :)
          echo "Option -$OPTARG requires an argument." >&2
          exit 1
          ;;
      esac
    done
    
    shift $((OPTIND-1))
    non_option_arguments=$@
    getopt 是单独的一个程序,getopts 是 bash 内建命令;getopts 不支持长参数(--起头的参数),而 getopt 支持。
    对比之下,getopt 似乎有着更广的应用范围。
     
    但是,却有着致命的缺陷。请看下面,当调用 getopt 命令后,输入被重新整理,如下
    #getopt 'a:bcdfe' -a 90 -c lllllllll
    -a 90 -c -- lllllllll
    但当调用 set 将整理后的输出重新设置为程序参数时,问题出现了。如果你的参数包含 空格 或 glob,如
    "a   b" 
    "/bin/*"

    含空格的参数会被识别为多个参数;含glob的参数会被展开。

    结论:getopt 只适合于解析参数不含空格或glob的情况。

  • 相关阅读:
    ActiveMQ消息队列技术融合Spring
    ActiveMQ消息队列技术Demo
    网页静态化技术Freemaker
    Solr的基本语法
    Solr的页面展示以及高亮显示
    Solr的了解与配置
    Angular中上传图片到分布式文件服务器FastDFS上
    分布式文件服务器FastDFS的使用
    自我学习笔记01
    数组转换成List集合
  • 原文地址:https://www.cnblogs.com/JesseFang/p/3343104.html
Copyright © 2020-2023  润新知