繁体   English   中英

通过连字符将bash传递值

[英]passing bash a value with leading hyphen

我有一个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

有两种指定参数的常规方法,但是这些方法不是在Shell级别强制执行的,它们只是传统方法:

-v xxxx
--value=xxxx

现在有时可以执行以下操作:

-vxxxx

如果您的值带有破折号并且无法正确解释,请执行以下操作:

--value=-value
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)-发行版(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级别而不是在ruby级别失败,所以为什么要麻烦发布一个ruby脚本?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM