KSH проверяет, начинается ли строка с подстроки - PullRequest
14 голосов
/ 02 ноября 2010

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

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

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

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

Ответы [ 3 ]

25 голосов
/ 02 ноября 2010

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

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

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

нет пробелов.
17 голосов
/ 02 ноября 2010

Также:

foo='abcdef'
pattern='abc*'

case "$foo" in
    $pattern) echo startswith ;;
    *) echo otherwise ;;
esac
6 голосов
/ 02 ноября 2010

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

if [[ $foo =~ ^abc ]]

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

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