我可以在 Bash 脚本中将数组作为选项参数获取吗?

我可以在 Bash 脚本中将数组作为选项参数获取吗?

我正在编写一个 shell 脚本,并希望在一个参数中传递多个选项。是否可以像使用 getopts 那样做到这一点?

需求示例:

./shell.sh -d db1 db2

应将值db1db2作为选项的值传递-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

相关内容