0

我正在开发一个 shell 脚本,它必须从传递的参数中提取字符串。如果我传递参数,比如

      test.sh arg1=someArgument Arg2=AnoTherArgument

假设用户在任何情况下都可以传递带有名称和值的参数,

我必须提取参数并进行操作,例如

      for arg in "$@"
      do
          if [ lower("${arg}") == "arg1" ] then
                # extract arg1's value and do something
          elif [ lower("${arg}") == "arg2" ] then
                # extract arg2's value and do something
          fi
      done

请帮助我如何在传递的相同情况下提取参数的值?

4

3 回答 3

3

为了清楚起见,我更喜欢这样的案例陈述:

while [ $# -gt 0 ]
do
    case $1 in
    a=* ) echo ${1#a=};;
    b=* ) echo ${1#b=};;
    # etc
    esac
    shift
done
于 2012-07-25T12:15:26.557 回答
0

使用双括号匹配 glob 模式;“then”之前需要分号

if [[ "$arg" = a=* ]];then echo ${arg#a=};fi

或者

if [ "${arg%%=*}" = a ];then echo ${arg#a=};fi

了解更多信息

man bash
/Parameter Expansion
于 2012-07-25T12:08:39.890 回答
0

为什么要费心去解析参数?通过环境传递事物:

foo

#!/bin/sh
echo Value of arg1: ${arg1-default value}

然后:

$ arg1=blah ./foo
Value of arg1: blah

$ ./foo
Value of arg1: default value
于 2012-07-25T18:46:35.957 回答