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 ]]