当第一个选项是bash中的路径时,getopts
我对bash脚本中的getopts有问题。基本上,我的脚本必须通过以下方式调用: ./myScript/path/to/a/文件夹-a-b 我的代码顶部有以下内容:当第一个选项是bash中的路径时,getopts,bash,getopts,Bash,Getopts,我对bash脚本中的getopts有问题。基本上,我的脚本必须通过以下方式调用: ./myScript/path/to/a/文件夹-a-b 我的代码顶部有以下内容: while getopts ":ab" opt; do case $opt in a) variable=a ;; b) variable=b ;; \?) echo "invalid option -$OPTARG" exit 0 esac done echo "$v
while getopts ":ab" opt; do
case $opt in
a)
variable=a
;;
b)
variable=b
;;
\?)
echo "invalid option -$OPTARG"
exit 0
esac
done
echo "$variable was chosen"
现在,只要我在没有/path/to/a/folder的情况下调用我的脚本,它就可以工作……我怎样才能让它工作呢
非常感谢如果必须在参数之前放置路径,请使用a来弹出第一个位置参数,并将其余的留给getopts
# Call as ./myScript /path/to/a/folder -a -b
path_argument="$1"
shift # Shifts away one argument by default
while getopts ":ab" opt; do
case $opt in
a)
variable=a
;;
b)
variable=b
;;
\?)
echo "invalid option -$OPTARG"
exit 0
esac
done
echo "$variable was chosen, path argument was $path_argument"
如前所述,更标准的答案是将非选项参数放在选项之后。更喜欢这种样式,因为它使脚本与内置POSIX选项解析更加一致
# Call as ./myScript -a -b /path/to/a/folder
while getopts ":ab" opt; do
case $opt in
a)
variable=a
;;
b)
variable=b
;;
\?)
echo "invalid option -$OPTARG"
exit 0
esac
done
shift $((OPTIND - 1)) # shifts away every option argument,
# leaving your path as $1, and every
# positional argument as $@
path_argument="$1"
echo "$variable was chosen, path argument was $path_argument"
将路径放在参数之后。脚本如何处理
/path/to/a/文件夹?