Hem*_*ang 33 bash getopts command-line-arguments
我试图-temp用Bash getopts 解析一个选项.我正在调用我的脚本:
./myscript -temp /foo/bar/someFile
Run Code Online (Sandbox Code Playgroud)
这是我用来解析选项的代码.
while getopts "temp:shots:o:" option; do
case $option in
temp) TMPDIR="$OPTARG" ;;
shots) NUMSHOTS="$OPTARG" ;;
o) OUTFILE="$OPTARG" ;;
*) usage ;;
esac
done
shift $(($OPTIND - 1))
[ $# -lt 1 ] && usage
Run Code Online (Sandbox Code Playgroud)
mco*_*ive 54
正如其他人所解释的那样,getopts并没有解析长期选择.你可以使用getopt,但它不是可移植的(它在某些平台上被破坏了......)
作为解决方法,您可以实现shell循环.这里是一个在使用标准getopts命令之前将长选项转换为short选项的示例(在我看来它更简单):
# Transform long options to short ones
for arg in "$@"; do
shift
case "$arg" in
"--help") set -- "$@" "-h" ;;
"--rest") set -- "$@" "-r" ;;
"--ws") set -- "$@" "-w" ;;
*) set -- "$@" "$arg"
esac
done
# Default behavior
rest=false; ws=false
# Parse short options
OPTIND=1
while getopts "hrw" opt
do
case "$opt" in
"h") print_usage; exit 0 ;;
"r") rest=true ;;
"w") ws=true ;;
"?") print_usage >&2; exit 1 ;;
esac
done
shift $(expr $OPTIND - 1) # remove options from positional parameters
Run Code Online (Sandbox Code Playgroud)
gei*_*rha 42
getopts 只能解析短期权.
大多数系统也有一个外部getopt命令,但getopt不是标准的,并且通常被设计破坏,因为它不能安全地处理所有参数(带有空格和空参数的参数),只有GNU getopt可以安全地处理它们,但只有你以GNU特定的方式使用它.
更简单的选择是不使用,只需用while循环迭代脚本的参数并自己进行解析.
有关示例,请参见http://mywiki.wooledge.org/BashFAQ/035.