排除 getopts-options 被 $@ 读入数组
Exclude getopts-options from being read into array by $@
我正在尝试使用以下用法制作脚本:
bash script.sh [-a] databases ...
脚本然后使用来自 'databases'
的参数填充数组 $databases
databases=("$@")
现在我正在尝试实现选项 -a
,如果设置的话应该声明 att=1
:
while getopts "a" o; do
case "${o}" in
a)
att=1
;;
esac
done
现在我面临的问题是在执行脚本时 -a
也被放入数组中。
我不能对数组使用 read
,因为我无法在脚本执行后输入其他参数,因为脚本将使用 RMM 自动执行,并且只允许您输入创建作业时添加参数。
在填充变量之前,您必须在 case
块中使用 shift
:
while getopts "a" o; do
case $o in
a)
att=1
shift
;;
esac
done
databases=("$@")
declare -p databases att
然后运行像这样:
bash script.sh -a DB1 DB2 DB3
输出:
declare -a databases=([0]="DB1" [1]="DB2" [2]="DB3")
declare -- att="1"
使用 getopts 管理选项的标准方法是执行全局 shift
:
#!/usr/bin/env bash
while getopts "a" o; do
case "${o}" in
a) att=1 ;;
esac
done
shift $((OPTIND - 1))
databases=("$@")
declare -p databases att
# output
# ./test.sh -a DB1 DB2 DB3
# declare -a databases=([0]="DB1" [1]="DB2" [2]="DB3")
# declare -- att="1"
我正在尝试使用以下用法制作脚本:
bash script.sh [-a] databases ...
脚本然后使用来自 'databases'
的参数填充数组 $databasesdatabases=("$@")
现在我正在尝试实现选项 -a
,如果设置的话应该声明 att=1
:
while getopts "a" o; do
case "${o}" in
a)
att=1
;;
esac
done
现在我面临的问题是在执行脚本时 -a
也被放入数组中。
我不能对数组使用 read
,因为我无法在脚本执行后输入其他参数,因为脚本将使用 RMM 自动执行,并且只允许您输入创建作业时添加参数。
在填充变量之前,您必须在 case
块中使用 shift
:
while getopts "a" o; do
case $o in
a)
att=1
shift
;;
esac
done
databases=("$@")
declare -p databases att
然后运行像这样:
bash script.sh -a DB1 DB2 DB3
输出:
declare -a databases=([0]="DB1" [1]="DB2" [2]="DB3")
declare -- att="1"
使用 getopts 管理选项的标准方法是执行全局 shift
:
#!/usr/bin/env bash
while getopts "a" o; do
case "${o}" in
a) att=1 ;;
esac
done
shift $((OPTIND - 1))
databases=("$@")
declare -p databases att
# output
# ./test.sh -a DB1 DB2 DB3
# declare -a databases=([0]="DB1" [1]="DB2" [2]="DB3")
# declare -- att="1"