-d is not an option $
Óï¾ä¼ì²éÿ¸ö²ÎÊýµÄÓÐЧѡÏî¡£µ±ÓÐÒ»¸ö±»·¢ÏÖʱ£¬Êʵ±µÄÃüÁÔÚÓï¾äÖÐÔËÐС£
$ ./test15 -d -c -a -d is not an option Found the -c option Found the -a option $
Separating options from parameters£¨´Ó²ÎÊýÖзÖÀëÑ¡Ï ͨ³£Çé¿öÏ£¬Äã»áҪͬʱʹÓýű¾µÄÑ¡ÏîºÍ²ÎÊý¡£×öÕâ¸öµÄ±ê×¼·½·¨ÊÇÓÃÒ»¸öÌØÊâµÄ×Ö·û´úÂëÀ´·Ö¸ôÁ½¸ö£¬µ±Ñ¡ÏîÍê³Éºó£¬Õý³£²ÎÊý¿ªÊ¼Ê±£¬»á¸æË߽ű¾¡£
ÔÚLINUXÖУ¬Õâ¸öÌØÊâµÄ×Ö·ûÊÇ£¨--£©¡£½Å±¾²ÉÓã¨--£©±íʾѡÏîÁбíµÄ½áÊø¡£¿´µ½ÁË(--)£¬ÄãµÄ½Å±¾¿ÉÒÔ°ÑÊ£ÓàµÄÃüÁîÐвÎÊý×÷Ϊ²ÎÊýÀ´´¦Àí£¬¶ø²»ÊÇÑ¡Ïî¡£
Òª¼ì²é£¨--£©£¬ÄãÐèÒª×öµÄ¾ÍÊÇÌí¼ÓÁíÒ»¸öÓï¾ä£º
$ cat test16 #!/bin/bash
# extracting options and parameters while [ -n \do
½á¹û±íÃ÷£¬½Å±¾»á°ÑËùÓеIJÎÊý¿´×÷Ñ¡Ïî¡£case \
-a) echo \-b) echo \-c) echo \--) shift break ;;
*) echo \esac shift done count=1 for param in $@ do
echo \count=$[ $count + 1 ] done $
$ ./test16 -c -a -b -- test1 test2 test3 Found the -c option Found the -a option Found the -b option
Parameter #1: test1 Parameter #2: test2 Parameter #3: test3 $
µ±½Å±¾µ½´ï£¨--£©Ê±£¬Í£Ö¹´¦ÀíÑ¡Ï²¢¼Ù¶¨ÈκÎÊ£ÓàµÄ²ÎÊý¶¼ÊÇÃüÁîÐвÎÊý¡£
Processing options with values£¨´¦ÀíÑ¡ÏîµÄÖµ£©
һЩѡÏîÐèÒªÒ»¸ö¸½¼ÓµÄ²ÎÊýÖµ¡£ÔÚÕâЩÇé¿öÏ£¬ÃüÁîÐп´ÆðÀ´ÏñÕâÑù£º
$ ./testing -a test1 -b -c -d test2
µ±ÄãµÄÃüÁîÐÐÑ¡ÏîÐèÒªÒ»¸ö¸½¼ÓµÄ²ÎÊý£¬ÄãµÄ½Å±¾±ØÐëÄܹ»¼ì²âµ½¡£ÏÂÃæÊÇÒ»¸öÀý×Ó£º
$ cat test17 #!/bin/bash
# extracting command line options and values while [ -n \do
case \
-a) echo \-b) param=\
echo \the -b option, with parameter value $param\shift 2;;
-c) echo \--) shift break;;
*) echo \esac shift done count=1
for param in \do
echo \count=$[ $count + 1 ] done
$ ./test17 -a -b test1 -d Found the -a option
Found the -b option, with parameter value test1 -d is not an option $
ÔÚÕâ¸öÀý×ÓÖУ¬°¸ÀýÓï¾ä¶¨ÒåÁËËü´¦ÀíµÄÈý¸öÑ¡Ïî¡£-bÑ¡ÏÐèÒªÒ»¸ö¸½¼ÓµÄ²ÎÊýÖµ¡£ÒòΪ±»´¦ÀíµÄ²ÎÊýÊÇ1£¬ÄãÖªµÀ£¬¶îÍâµÄ²ÎÊýֵλÓÚ2£¨ÒòΪËùÓеIJÎÊý¶¼ÔÚ´¦ÀíºóÆ«ÒÆ£©¡£Ö»Ðè´Ó2±äÁ¿ÖÐÌáÈ¡²ÎÊýÖµ¡£µ±È»£¬ÒòΪÎÒÃÇʹÓÃÁËÕâ¸öÑ¡ÏîµÄË«²ÎÊýµã£¬Äú»¹ÐèÒªÉèÖÃÒÆ