簡體   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