shell 脚本中getopt 和 getopts 的区别

 
getop string1 string2..n
string1中标出的字符表示合法的标志(-后面可以跟的字符),如果标志字符后面有:,说明这个标志后面(可以有0-n个空格)的stringx是它的参数, 
getop 按string1 处理 string2....n,输出结果
-标志1 参数1 -标志2 参数2    ..... -- 参数n 


40:/tmp/v>getopt "a:b" "-bafile"
-b -a file --

由此可以看到,getopt也是getopts的规则来重新组合参数。
这个层面他们完全一样
请注意他们的区别在于提供getopts的shell内置了OPTARG这个变变,getopts修改了这个变量。
而getopt则不能。因此getopt必须使用set来重新设定位置参数$1,$2....
然后在getopt中用shift的方式依次来获取。

 

再者

args=`getopt abo: $*`
set -- $args


注意第二句话,如果某个参数中含有空格,那么这个参数就变成了多个参数。因此,基本上,如果参数中可能含有空格,那么必须用getopts。否则仅仅从使用上看,他们没有区别。
当然,重要的是
getopt是个外部binary文件,而getopts是built-in

你可能感兴趣的:(shell 脚本中getopt 和 getopts 的区别)