使用参数覆盖'='作为shell脚本中的字符串

时间:2013-12-03 04:27:30

标签: shell

我试图调用一个shell脚本以及类似这样的参数:

sh test.sh -arg1="ab" -arg2="cd" -arg3="ef=gh"

脚本代码如下:

while [ $# -gt 0 ]
  do
          key=${1%=*}
              case $key in
                          "-arg1") arg1=${1#$key=} ;;
                          "-arg2") arg2=${1#$key=} ;;
                          "-arg3") arg3=${1#$key=} ;;
                          esac
                                          shift;
                                      done

  echo "arg1 is $arg1 arg2 is $arg2 and arg3 is $arg3"

显示正确的arg1和arg2,但arg3显示为空。我认为这是因为'='  在arg3里面签名。关于如何覆盖它的任何帮助。

由于

3 个答案:

答案 0 :(得分:1)

尝试替换代码行:  key=${1%=*} 这一个:  key=${1%%=*}

答案 1 :(得分:0)

您可以使用以下命令直接访问命令行参数:

$0 -- Name of File
$1 -- 1st Argument
$2 -- 2nd Argument
$3 -- 3rd Argument
.
.
.

<强> test.sh

echo "arg1 is $1 arg2 is $2 and arg3 is $3"

要运行的命令

sh test.sh "ab" "cd" "ef=gh"

<强>输出

arg1 is ab arg2 is cd and arg3 is ef=gh

答案 2 :(得分:0)

-arg3="ef=gh"

您需要转义=字符

-arg3="ef\=gh"