2013-12-25 4 views
0

Я пытаюсь использовать регистр case, чтобы определить, есть ли у меня юридическая команда. это выглядит примерно так:case statement in bash

function commandTest { 
    case $1 in 
     –score) echo "something" 
      return 0;; 
      . 
      . 
      . 
     *) echo unknown 
     return 0;; 
esac 
return 1 
} 

сейчас, если я использую эту функцию, это не работает. случай не распознает строку правильно, хотя он идентичен

commandTest "-score" 

не печатает «что-то». так что я делаю неправильно здесь?

+0

Вы не используете правильный дефис '' -score) он должен быть '-score'. –

+0

Почему вы используете 'return 0' как из допустимых, так и недействительных кодов? Цель кода возврата - передать успех (условно, ноль) и отказ (другие значения) вызывающему. – tripleee

+0

Это всего лишь черновик. цель состоит в том, чтобы увидеть, напечатан ли «что-то». возвратные значения для меня сейчас не важны – littlerunaway

ответ

6

Как писал, ваш пример кода имеет en-dash (Unicode U + 2013) перед score, вместо знака минус (ASCII 0x2D), который предотвращает Баш из сращивания Строка -score

Переключатель:

–score) echo "something" 

к:

-score) echo "something" 
+0

Прошу прощения, что такое em-dash? – littlerunaway

+0

Оказывается, это был «en-dash», а не «em-dash». Оба являются типографскими символами немного длиннее знака минус/тире, а для человеческого лица визуально очень похожи на тире, но очень отличаются от оболочки bash. Их сложно вводить стандартными текстовыми редакторами. Если вы использовали что-то вроде слова MS для написания кода, переключитесь на стандартный текстовый редактор, например, vim, emacs или notepad ++ – lreeder

+0

Я использую notepad ++ – littlerunaway