Reputation: 42720
Is there a built-in POSIX equivalent for this bashism?
my_string="Here is a string"
last_character=${my_string: -1}
I keep seeing things like this recommended, but they seem like hacks.
last_character=$(echo -n "$my_string" | tail -c 1)
last_character=$(echo -n "$my_string" | grep -o ".$")
But, maybe a hack is all we have with POSIX shells?
Upvotes: 5
Views: 1994
Reputation: 25789
If you really have to do it POSIX only:
my_string="Here is a string"
last_character=${my_string#"${my_string%?}"}
What it does is essentially removing $my_string
sans its last character from the beginning of the $my_string
, leaving you with only the last character.
Upvotes: 7
Reputation: 932
If you just need to check what is the last character and then act on its value, then the case ... esac
construct is a portable way to express it.
Upvotes: 1
Reputation: 571
num=`echo $my_string | wc -c `
let num-=1
last=`echo $my_string | cut -c$num`
echo $last
assumpting: (its lastchar here) is the string for which u need the last charactor for. Hope this is helpful.
Upvotes: 0