More ways to do this:
For all answers, start with:
A="Some variable has value abc.123"
The array example (#3 below) is a really useful pattern, and depending on what you are trying to do, sometimes the best.
1. with awk
, as the main answer shows
echo $A"$A" | awk '{print $NF}'
2. with grep
:
echo "$A" | grep -o '[^ ]*$'
- the
-o
says to only retain the matching portion of the string
- the
[^ ]
part says "don't match spaces"; ie: "not the space char"
- the
*
means: "match 0 or more instances of the preceding match pattern (which is [^ ]
), and the $
means "match the end of the line." So, this matches the last word after the last space through to the end of the line; ie: abc.123
in this case.
3. via regular bash "indexed" arrays and array indexing
Convert A
to an array, with elements being separated by the default IFS
(Internal Field Separator) char, which is space:
# Capture space-separated words as separate elements in array A_array
A_array=($A)
# Print only the last element via bash array right-hand-side indexing syntax
echo "${A_array[-1]}" # last element only
Output:
abc.123
Going further:
What makes this pattern so useful too is that it allows you to easily do the opposite too!: obtain all words except the last one, like this:
array_len="${#A_array[@]}"
array_len_minus_one=$((array_len - 1))
echo "${A_array[@]:0:$array_len_minus_one}"
Output:
Some variable has value
For more on the ${array[@]:start:length}
array slicing syntax above, see my answer here: Unix & Linux: Bash: slice of positional parameters, and for more info. on the bash "Arithmetic Expansion" syntax, see here:
- https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Arithmetic-Expansion
- https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Arithmetic