因此,我正在设置一个 bash 脚本,并希望使用 getopts 将参数解析为某些标志。举一个最小的例子,考虑一个带有标志 -M 的脚本,它以 y 或 n 作为参数。如果我使用以下代码:
#!/bin/bash
# minimalExample.sh
while getopts "M:" OPTION;
do
case ${OPTION} in
M)
RMPI=${OPTARG}
if ! [[ "$RMPI" =~ "^[yn]$" ]]
then
echo "-M must be followed by either y or n."
exit 1
fi
;;
esac
done
我得到以下信息:
$ ./minimalExample.sh -M y
-M must be followed by either y or n.
FAIL: 1
但是,如果我改用以下代码
#!/bin/bash
# minimalExample2.sh
while getopts "M:" OPTION;
do
case ${OPTION} in
M)
RMPI=${OPTARG}
if [ -z $(echo $RMPI | grep -E "^[yn]$") ]
then
echo "-M must be followed by either y or n."
exit 1
else
echo "good"
fi
;;
esac
done
我得到:
$ ./minimalExample2.sh -M y
good
为什么不起作用minimalExample.sh
?