我正在尝试编写一个可以同时使用$ {1}和getopts选项的脚本。我希望它能够使用使用线:
./test_script test -a
打印:
test
-a was triggered!
我试过
echo ${1};
while getopts "c:a" opt; do
case $opt in
a)
echo "-a was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
哪个无法让我访问$ {1}并检测到同时使用-a选项。有没有办法同时使用这两种?我想避免将测试字符串转换为另一个getopts选项。
答案 0 :(得分:1)
当getopts退出时,您可以使用 shift 。 例如:
while [ $# -gt 0 ] ; do
while getopts "c:a" opt ; do
case $opt in
# YOUR OPTIONS
esac
done
OTHER_VALUE=$1
shift
done
PS:通常我不会使用getopts,但我更喜欢自己解析args如下:
while [ $# -gt 0 ] ; do
case "$1" in
'-a' | '--along' )
echo '-a was triggered' ;;
'-b' | '--blong' )
echo '-b was trigger with arg ' $2 ;
shift ;; # One extra shift for the argumnent $2
* )
echo 'Unknown value (maybe test)' ;;
esac
shift
done