Подтвердить что ты не робот

Как сделать так, чтобы выписка с регистром соответствовала диапазону номеров?

Я запускаю коммутатор с номерами столбцов, которые могут быть в диапазоне от 0 до 50. Теперь каждый случай поддерживает дискретный номер столбца, и я наблюдаю его сбой.

Вот код:

    i=10
    a=1
    b=0.65
    if [ "$a" != "$b" ]; then 
       case $i in  
            [1]|[2]|[5]) echo "Not OK"; ;; 
            [9-10]|[12]) echo "may be ok"; ;; 
            *) echo "no clue - $i"; ;; 
       esac
   fi

Я ожидаю, что этот код для вывода may be ok но не понимаю no clue - 10.

4b9b3361

Ответ 1

Bash case не работает с диапазонами чисел. [] для шаблонов оболочки.

например, этот случай [1-3]5|6) будет работать для 15 или 25 или 35 или 6.

Ваш код должен выглядеть так:

i=10
a=1
b=0.65
if [ "$a" != "$b" ] ; then
   case $i in
        1|2|5) echo "Not OK"; ;;
        9|10|12) echo "may be ok"; ;;
        *) echo "no clue - $i"; ;;
   esac;
fi

Если i может быть real между 9 и 10, тогда вам нужно будет использовать if (вместо случая) с диапазонами.

Ответ 2

if и [ решение

arg=1
if [ "$arg" -lt 5 ]; then
  echo 'less than 5'
elif [ "$arg" -lt 15 ]; then
  echo 'less than 15'
elif [ "$arg" -eq 17 ] || [ "$arg" -eq 19 ]; then
  echo '17 or 19'
else
  echo 'neither'
fi

POSIX 7

Bash следует за POSIX, как указано fooobar.com/info/152166/...

Вот цитата: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 раздел "Case Conditional Construct":

Случай условной конструкции должен выполнять составной список, соответствующий первому из нескольких шаблонов (см. Обозначение соответствия шаблону) [...] Несколько шаблонов с одним и тем же составным списком должны быть разделены символом '|' символ. [...]

Формат конструкции case выглядит следующим образом:

case word in
     [(] pattern1 ) compound-list ;;
     [[(] pattern[ | pattern] ... ) compound-list ;;] ...
     [[(] pattern[ | pattern] ... ) compound-list]
  esac

а затем http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13 раздел "2.13. Обозначение соответствия шаблону" говорит:

[Если открытая скобка вводит выражение скобки, как в выражении XBD RE Bracket Expression

и расширенные регулярные выражения указывают на раздел "9.3.5 RE Bracket Expression", в котором говорится:

Выражение скобки (выражение, заключенное в квадратные скобки, "[]" ) является RE, которое должно соответствовать определенному набору одиночных символов и может соответствовать определенному набору многосимвольных элементов сортировки, пустой набор выражений списка, содержащийся в выражении скобки.

Таким образом, учитываются только отдельные символы, когда вы делаете что-то вроде:

[9-10]