I will set some variables and then extract out portions of the variable employing Bash shell variable interpretations.

t1 originally             ><
   ${t1:-notSet} returns  >notSet<
   t1 now                 ><

t2 originally             ><
   ${t2:=nowSet} returns  >nowSet<
   t2 now                 >nowSet<

t3 originally                             >setBefore<
   ${t3:?Error variable not set} returns  >setBefore<
   t3 now                                 >setBefore<
   If t3 had not been set script would have died with message
   Error variable not set  ${t3:?Error variable not set}

t4 originally                 >ll<
   ${t4:+alreadySet} returns  >alreadySet<
   t4 now                     >ll<

t5              /export/home/shinchey/this.is.a.test
 ${t5:8:4}  substr from 8 for 4 chars  ->home
 ${#t5}     length of variable t4      ->36
 ${t5##*/}  extract file name          ->this.is.a.test
 ${t5%/*}   extract directory name     ->/export/home/shinchey
 ${t5#/*/}  down one level             ->home/shinchey/this.is.a.test	
 ${t5%.*}   drop one suffix            ->/export/home/shinchey/this.is.a
 ${t5%%.*}  drop all suffixes          ->/export/home/shinchey/this
 ${t5//./}  remove all periods         ->/export/home/shinchey/thisisatest

name                                   ->ABC-123-wxy
 ${name%%-*} 1st part only             ->ABC
 tt=${name#*-}
 ${tt%-*}    2nd part only            ->123
 ${name##*-} 3rd part only            ->wxy
 ${name#*-}  no 1st part              ->123-wxy
 ${name%%-*}-${name##*-} no 2nd part  ->ABC-wxy
 ${name%-*} no 3rd part               ->ABC-123
	 

Copyright © 1997 - 2020, Stephen Hinchey