Передавая bash значение с первым дефисом

У меня есть команда bash, которая требует строковое значение после "-v". Когда это строковое значение имеет начальный "-", bash пытается интерпретировать его как новую опцию команды bash, а не значение, которое я пытаюсь дать для -v. Есть ли способ, которым я могу избежать этого ведущего дефиса? Я старался-v -- -myValue но тогда он говорит мне, что "option '-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 ответа

Решение

Есть два обычных способа задания аргументов, но они не применяются на уровне оболочки, это просто традиция:

-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 скрипт?)

Другие вопросы по тегам