我有一个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
答案 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级别失败,而不是在红宝石级别,所以为什么懒得发布红宝石脚本?)