因为此时的结果是set命令(也可能是eval命令)的执行结果,而getopt是再前一条的命令。 解决这个问题,要先把getopt命令执行一遍,进行判断。然后再用set调用一遍,可以直接使用之前执行的结果: getopt_cmd=$(getopt -n $(basename $0) -- a:b:s:u "$@") [ $? -ne 0 ] && exit 1 eval set -- "$getopt...
-n :字符串长度不等于 0 为真 root@master:~# VAR1=1;VAR2="";[-n"$VAR1"];echo $?0root@master:~# VAR1=1;VAR2="";[-n"$VAR2"];echo $?1 -z :字符串长度等于 0 为真 root@master:~# VAR1=1;VAR2="";[-z"$VAR1"];echo $?1root@master:~# VAR1=1;VAR2="";[-z"$VAR...
getopt是Linux中的一个命令,通常位于/usr/bin目录中,它可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。getopt的命令使用有一下的三种格式: getoptoptstringparametersgetopt[options][--]optstringparametersgetopt[options]-o|--optionsoptstring[options][--]parameters getopt的参数分为两部分...
getopts是Shell内置命令,而getopt则不是。 Shell解析命令行参数的方式 在Linux bash中,可以用以下三中方式解析命令行参数: 直接处理:使用$1、$2、$3… 进行解析 getopts:短选项的情况,例如:-n 10 -f file.txt。getopts不能直接处理长的选项(如:--prefix=/home等) getopt:处理短选项或者长选项,例如:--perfix...
$getopt-n test.sh-- ab:cd -ad value1 -b test.sh:选项需要一个参数 --b-a -d --'value1'$ 这里看到包裹错误是,名字已经被替换掉了。 在脚本中,可以使用$(basename $0)或者直接用\$0。 禁止错误报告 还有一个-q参数,可以禁止错误报告,解析错误的选项和参数将被丢弃: ...
readonly ARGS=`getopt -n "$PROG" -a -o c:p:h -l count:,pid:,help -- "$@"`[ $? -ne 0 ] && usage 1eval set -- "${ARGS}" while true; docase "$1" in-c|--count)count="$2"shift 2;;-p|--pid)pid="$2"shift 2;;-h|--help)usage;;--)shiftbreak;;esacdonecount=...
getopts:单个字符选项的情况(如:-n 10 -f file.txt等选项) getopt:可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等) 总结:小脚本直接处理即可,getopts能处理绝大多数的情况,getopt较复杂、功能也更强大。 1、直接处理 使用以下几个变量进行处理: ...
getopts: 单个字符选项的情况,例如:-n 10 -f file.txt等选项 getopt:处理单个字符或长选项(long-option),例如:–prefix=/home等 经验:小型脚本可以直接处理,大多数情况使用getopts,getopt的功能更加强大。
这句话的意思是说,如果getopt命令没有发现-o选项,则会尝试去找默认的short option string。 如果我们尝试执行这样的命令 代码语言:javascript 复制 getopt -l a-long: -- --a-long=para_for_a-long -a -l -o -n -g -p -r -f -z 其实也可以写成getopt -l a-long: -- --a-long=para_for_a...
在开发过程中,命令行接口的易用性对于用户接受度至关重要。当我们需要编写bash脚本来接收用户输入并实现特定功能时,如何优雅地处理命令行参数就显得尤为重要。本文将关注getopts和getopt(注意getopts是shell内置,而getopt非shell)这两种工具的使用。解析shell脚本命令行参数的方式有三种:直接通过$0(脚本...