KSH проверяет, начинается ли строка с подстроки

Мне нужно проверить, имеет ли переменная значение строки, которая начинается с указанной подстроки.

В Python это будет примерно так:

foo = 'abcdef'
if foo.startswith('abc'):
    print 'Success'

Каков самый явный способ проверить в Ksh, начинается ли strig $foo с подстроки bar?

Ответы

Ответ 1

Это очень просто, но выглядит немного странно:

if [[ "$foo" == abc* ]]; then ...

Можно предположить, что ksh расширяет шаблон с файлами в текущем каталоге, но вместо этого он выполняет сопоставление шаблонов. Вам нужно [[. Единый [ не будет работать. Кавычки не являются строго необходимыми, если в foo нет пробелов.

Ответ 2

также:

foo='abcdef'
pattern='abc*'

case "$foo" in
    $pattern) echo startswith ;;
    *) echo otherwise ;;
esac

Ответ 3

Вы также можете выполнить регулярное выражение:

if [[ $foo =~ ^abc ]]

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

bar='^begin (abc|def|ghi)[^ ]* end$'
if [[ $foo =~ $bar ]]