Определение, если первая последовательность запускается со второй последовательности

Короткий ответ:

Для двух оболочек, которые ввели эту нотацию (bash и ksh93) скалярная переменная - это просто массив с одним элементом.

Для создания массива не требуется специального объявления. Достаточно простого присваивания, и обычное присваивание var=value идентично var[0]=value.

0
31.08.2018, 05:36
2 ответа
set world

Тогда:

if [ "${1%%w*}" ]
then
  echo false
else
  echo true
fi
  1. Агрессивно удалить подстроку, начинающуюся с w, из исходной строки
  2. Если что-то осталось, то исходная строка не начинается со второй строки

или:

if [ "$1" = "${1#w}" ]
then
  echo false
else
  echo true
fi
  1. Удалить wиз исходной строки
  2. Сравнить с исходной строкой
  3. Если они равны, то исходная строка не начинается со второй строки
5
28.01.2020, 02:14

Если ваша оболочка представляет собой bash :в двойных скобках, правая -сторона оператора == является шаблоном, если он не процитирован полностью:

if [[ world == w* ]]; then
    echo true
else
    echo false
fi

Или короче :[[ world == w* ]] && echo true || echo false[ *]

Если вы не ориентируетесь конкретно на bash :, используйте оператор case для сопоставления с образцом

case "world" in
    w*) echo true ;;
    *)  echo false ;;
esac

[ *] но вы должны быть осторожны с формой A && B || C, потому что Cбудет выполнено, если либо A не сработает , либо B не сработает. Форма if A; then B; else C; fiбудет только выполнять C, если A терпит неудачу.

11
28.01.2020, 02:14

Теги

Похожие вопросы