我正在编写一个 bash 脚本,它有可选的标志,还有一个输入。
我无法获取输入,$1
因为当存在标志时输入会发生变化。
例如,如果我运行script.sh test
那么$1
将等于测试。
但如果我运行script.sh -b test
那么$1
将等于-b。
while getopts 'bh' flag; do
case "${flag}" in
b) boxes= 'true' ;;
h) echo "options:"
echo "-h, --help show brief help"
echo '-b add black boxes for monjaro'
;;
*) error "Unexpected option ${flag}" ;;
esac
done
echo $1;
我拥有的标志数量尚未设置,我知道我将来会添加更多。
我如何才能始终获得第一个非标志值?
答案1
您通常用作getopts
:
while getopts...; do
# process options
...
done
shift "$((OPTIND - 1))"
printf 'First non-option argument: "%s"\n' "$1"
上面shift
丢弃了 处理的所有选项参数(包括尾部,--
如果有的话)getopts
。