无法正确解析shell中的多个选项

时间:2019-04-01 19:13:40

标签: linux shell

所以我需要将多个参数(例如:list)传递给一个选项,而仅将一个参数传递给另一选项,并根据输入触发多个动作

例如:

./scriptname -a <List of strings> -b one parameter

但是整个字符串都被解析为 -a -b one_parameter 引发错误。

我正在使用getopts方法,而-b没有被识别为单独的选项。


while getopts "a:b:" OPTION
do 

   case $OPTION in 
   a) shift 
        function_a $@
      ;;
   b) shift
        function_b $@
      ;;
   esac 
done

因此-a应该接受一些命令并触发function_a,而对于-b也是如此。

1 个答案:

答案 0 :(得分:0)

赞:

#!/bin/bash

# This function prints the arguments passed to it
foo() {
    while [ $# -gt 0 ] ; do
        echo "-> ${1}"
        shift
    done
}

while getopts "a:b:" option
do
   echo "${option}"
   case ${option} in
     a)
        foo ${OPTARG}   # <-- no quotes
      ;;
     b)
        foo "${OPTARG}" # <-- quotes
      ;;
   esac
done

然后确保在调用脚本时引用字符串列表:

./scriptname -a "foo bar baz" -b "hello world"
a
-> foo
-> bar
-> baz
b
-> hello world