当同时使用getopts时,如何在Linux shell脚本中获取程序参数?
所以我有一个脚本,我想用当同时使用getopts时,如何在Linux shell脚本中获取程序参数?,linux,shell,getopts,Linux,Shell,Getopts,所以我有一个脚本,我想用getopts处理选项,但我也想用通常的方式读取程序本身的参数。因此,在这个示例脚本中,我希望处理选项,然后echo参数,如/script.sh-abc theargument。出现的问题是,我不知道它是哪个shell参数。参数不应与选项相关,因此您可以调用脚本,如/script.sh参数: #!/bin/sh while getopts "abc" opt; do case $opt in a) echo "option a" ;;
getopts
处理选项,但我也想用通常的方式读取程序本身的参数。因此,在这个示例脚本中,我希望处理选项,然后echo
参数,如/script.sh-abc theargument
。出现的问题是,我不知道它是哪个shell参数。参数不应与选项相关,因此您可以调用脚本,如/script.sh参数
:
#!/bin/sh
while getopts "abc" opt; do
case $opt in
a) echo "option a" ;;
b) echo "option b" ;;
c) echo "option c" ;;
esac
done
echo # what?
我不能只用$optand
移动参数,使其成为$1
,因为可以给出像-abc
,-a-b-c
,-ab-c
等选项,所以选项的数量与参数的数量不对应
理想情况下,我希望避免bashbash
的方法是对${!VARIABLE}
使用间接寻址-将VARIABLE
扩展到的内容视为要使用的参数,因此示例中while循环后的echo“${!optand}”
将显示argument
更通用的方法是使用shift
放弃选项参数,然后使用$1
等:
if [ "$OPTIND" -gt 1 ]; then
shift $((OPTIND - 1))
fi
在您的示例中,$OPTIND
在循环后为2,因此这会将位置参数向左移动1,丢弃-abc
,并将参数保留在$1
中。如果您使用-abc theargument
,-ab-c theargument
,-a-b-c theargument
,等等,这种方法是有效的