我正在编写一个 shell 脚本,并希望在一个参数中传递多个选项。是否可以像使用 getopts 那样做到这一点?
需求示例:
./shell.sh -d db1 db2
应将值db1
和db2
作为选项的值传递-d
。
答案1
您可以多次使用一个选项并将结果收集到数组中:
./shell.sh -d db1 -d db2
代码:
while getopts "d:" opt
do
case ${opt} in
d) dbs+=("$OPTARG");;
esac
done
答案2
不可以。但是你可以传递一个参数,例如用冒号连接;或者用引号
./shell.sh -d db1:db2
./shell.sh -d "db1 db2"
在第一种情况下:
while getopts d: opt; do
case $opt in
d) IFS=: read -a dbs <<< "$OPTARG" ;;
esac
done
在第二种情况下(引用)
d) set -f # turn off filename expansion
dbs=($OPTARG) # variable is unquoted
set +f;; # turn it back on