可以使用长选项(Long options)解决此问题。长选项以两个破折号(--)开头,并用一个等号后跟一个参数来表示选项和选项值。然后可使用 getopt 命令的 -a 选项来处理这些长选项。
以下是一个示例脚本,使用长选项来处理命令行参数:
#!/bin/bash
args=$(getopt -a -o h -l help,output-dir:,input-file: -- "$@")
eval set -- "$args"
while true; do
case $1 in
-h|--help)
echo "Usage: example.sh [OPTIONS]"
echo " -h, --help Show help"
echo " --output-dir Output directory"
echo " --input-file Input file"
exit 0
;;
--output-dir)
output_dir="$2"
shift 2
;;
--input-file)
input_file="$2"
shift 2
;;
--)
shift
break
;;
*)
echo "Invalid argument: $1"
exit 1
;;
esac
done
echo "Output directory: $output_dir"
echo "Input file: $input_file"
在这个脚本中,使用 -l 选项定义了长选项“--help”,“--output-dir”和“--input-file”。当解析参数时,将传递“-a”选项来处理长选项,该选项告诉 getopt 命令在处理 $@ 时也要接受长选项。
在 while 循环中,使用 case 语句来处理选项。如果是“-h”或“--help”选项,则打印帮助信息并退出。如果是“--output-dir”或“--input-file”选项,则将其值存储为输出目录或输入文件,并将参数向后移动两个位置。如果是“--”选项,则结束