Вы должны опираться на что-то чтобы определить что оставить а что отбросить.
В данном примере можно использовать символ _
для отрезания лишнего так:
s="start_string_end"
$ v1=${s%_*} # отрезали конец
$ echo $v1
start_string
$ v2=${v1#*_} # отрезали начало и получили string
$ echo $v2
string
Также можно использовать порядок слов и получить искомый string с помощью массива:
a=( ${s//_/ } )
$ echo ${a[@]}
start string end
$ echo ${a[1]}
string
Но этот метод не сработает или потребует дополнительных ухищрений если string содержит пробелы.
Использовать регулярное выражение:
$ [[ $s =~ .+_(.+)_.+ ]] && echo ${BASH_REMATCH[1]}
string
Или просто сказать string='string'
)