Передавая 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 скрипт?)