Я не понимаю вывод команды expr

Когда я запускаю этот код

#!/usr/bin/bash
str="I am enjoying this day to the fullest !"
x="this"
y=`expr index "$str" "$x"`
z=${str:`expr $y - 1`:5}
echo $x
echo $y
echo $z

, на выходе получается

this
11
ing t

, поэтому я хочу знать, почему это так. И как я могу исправить это?

0
задан 3 June 2021 в 00:04

1 ответ

индекс ищет символы. Возможно, вы хотели сказать match?

Попробуйте

#!/bin/bash
str="I am enjoying this day to the fullest !"
x="this"
y=$(expr  "$str" : ".*$x" - length "$x")
z=${str:$y:${#x}}
echo $x
echo $y
echo $z

Оператор : - это оператор якорного регекса. Шаблон для поиска - это "." (любой символ) "*" ноль или более из них, за которым следует строка в $x (примечание: она не должна содержать символов regex без кодировки)

Эта часть вернет длину совпавшей строки, которая будет количеством символов от начала строки ("закрепленной") до конца строки в $x.

Следующая часть вычитает длину $x, чтобы получить смещение в $str до первого символа $x. Это можно заменить на ${#x}, как в следующей строке.

0
ответ дан 28 July 2021 в 11:33

Другие вопросы по тегам:

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