This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision |
posix_shell_getpots [2019/09/25 18:11] – rpjday | posix_shell_getpots [2019/09/30 12:16] (current) – [Starting points] rpjday |
---|
| |
* [[https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html|https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html]] | * [[https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html|https://pubs.opengroup.org/onlinepubs/9699919799/utilities/getopts.html]] |
| * [[https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02|https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02]] |
| * [[https://sookocheff.com/post/bash/parsing-bash-script-arguments-with-shopts/|https://sookocheff.com/post/bash/parsing-bash-script-arguments-with-shopts/]] |
| |
| ===== Starting points ===== |
| |
| First, there has been much blood spilled discussing how to support //optional// arguments using ''getopts'' -- the correct solution is to not do that, as explained in Guideline 7 [[https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02|here]]. So we won't. |
| |
| And, second, if the //optstring// handed to getopts starts with a colon, then getopts uses what is called "silent error reporting"; this appears to be the recommended approach, so we'll stick with that. In short, don't do this: |
| |
| <code> |
| while getopts ab:c: opt ; do |
| </code> |
| |
| Do this (note the leading colon): |
| |
| <code> |
| while getopts :ab:c: opt ; do |
| </code> |
| |
| Explanation below. |
| |
| ===== Fleshed out example ===== |
| |
| <code> |
| ... coming soon ... |
| </code> |