2014-03-12 31 views
1

我试图将一个参数作为“逐字”传递给我的脚本,问题是在双引号内的参数"",它以一个双破折号/双连字符--

这是一个例子

script.sh -f "--conf=bla" 

在我的剧本都$*[email protected]将其转化成

-f --conf=bla 

,当这件事达到getopts是没有办法的方式应该将该信息进行解码是。

顺便说一下,这是我的getopts

foo() 
{ 
    while getopts ":f:" vars 
    do 
      case ${vars} in 
        f) MYVAR=${OPTARG};; 
        *) Err; exit 1;; 
      esac 
    done 
    shift $((OPTIND-1)) 
} 

我想用来存储--conf=blaMYVAR,我无法找到一个方法来做到这一点,显然是我无法控制的方式,双引号被剥离,一般来说,我不能真正将文本逐字传递给我的脚本。

我该如何控制它?

+0

为什么你认为存在或不存在引号决定了最终结果? –

+0

@ IgnacioVazquez-Abrams这不是真的,这是关于事实,即我作为输入传递它不是我进入脚本后得到的。双引号仅用作用户输入参数的分隔符。 – user2485710

+0

那么你想让'$ MYVAR'包含'--conf = bla'还是'“--conf = bla”'呢? –

回答

1
$ cat t.sh 
#!/bin/sh 

foo() 
{ 
     # unset OPTIND 
     while getopts ":f:" vars 
     do 
       case ${vars} in 
         f) MYVAR=${OPTARG} ;; 
         *) echo "error"; exit 1 ;; 
       esac 
     done 
     shift $((OPTIND-1)) 

     echo "\$MYVAR=[${MYVAR}]" 
} 

foo "[email protected]" 

$ ./t.sh -f "--conf=blah" 
$MYVAR=[--conf=blah] 

请详细说明一下吗?

+0

我从字面上不知道,我只是试过这个,它的工作原理,这个确切的东西不能正常工作2秒钟前,我会尝试将它集成到我的最终脚本中,看看它是否一切正常 – user2485710

+0

在我的函数中等待我有'本地OPTIND'在任何其他之前声明,这可能是一个问题?这是唯一的实质性差异,我忘记了。 – user2485710

+0

很明显,我第一次写这篇文章的时候是对的,但是我可能以最糟糕的方式编辑了一些东西,无论如何,现在这是按照它的设想工作的,谢谢。 – user2485710