传递bash一个带有前导连字符

时间:2016-06-10 15:53:29

标签: ruby bash trollop

我有一个bash命令,在" -v"之后需要一个字符串值。当此字符串值具有前导" - "时,bash会尝试将其解释为bash命令的新选项,而不是我尝试为-v提供的值。有没有办法逃脱这个领先的连字符?我试过了 -v -- -myValue然后它告诉我"选项' -v'需要一个参数。"

该命令正在调用ruby文件。我认为对于这个问题,这是ruby代码中有意义的部分:

opts = Trollop::options do
  opt :method, "Encrypt or Decrypt", :short => "m", :type => :string, :default => "decrypt"
  opt :value, "Value to Decrypt or Encrypt", :short  => "v", :type => :string, :default => ""
end

2 个答案:

答案 0 :(得分:1)

有两种常规方法可以指定参数,但这些方法并没有在shell级别强制执行,它们只是传统:

-v xxxx
--value=xxxx

现在有时可以这样做:

-vxxxx

如果你有一个带破折号的值并且没有被正确解释,请执行以下操作:

--value=-value

答案 1 :(得分:-1)

cmd -v '-string value with leading dash'

修改

$ cat ~/tmp/test.sh
 #!/bin/bash
 str=
 while getopts "v:" opt; do
 case "$opt" in
    v) str=$OPTARG;;
 esac
 done
 shift $(( OPTIND -1 ))

 echo "option was '$str'"

简单的测试文件,我的bash是GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)

结果:

chris@druidstudio:~⟫ ~/tmp/test.sh -v string
  option was 'string'
chris@druidstudio:~⟫ ~/tmp/test.sh -v -string
  option was '-string'
chris@druidstudio:~⟫ ~/tmp/test.sh -v '-string'
  option was '-string'

所以,也许,处理你的选项的bash脚本编写不正确,或者你有早期版本的bash。正如我之前回答的另一个愚蠢的问题,千里眼不是我的技能之一。所以,做一个好的小伙子,可能会给我们,你要求帮助的人,相关的信息(正如你所说,你的脚本在bash级别失败,而不是在红宝石级别,所以为什么懒得发布红宝石脚本?)