Issue
I have written the following lines to get the last character of a string:
str=$1
i=$((${#str}-1))
echo ${str:$i:1}
$ bash last_ch.sh abcd/
/
It does not work for abcd*
:
$ bash last_ch.sh abcd*
array.sh assign.sh date.sh dict.sh full_path.sh last_ch.sh
It lists the files in the current folder.
Solution
That's one of the reasons why you need to quote your variables:
echo "${str:$i:1}"
Otherwise, bash expands the variable and in this case does globbing before printing out. It is also better to quote the parameter to the script (in case you have a matching filename):
sh lash_ch.sh 'abcde*'
Also see the order of expansions in the bash reference manual. Variables are expanded before the filename expansion.
To get the last character you should just use -1
as the index since the negative indices count from the end of the string:
echo "${str: -1}"
The space after the colon (:
) is REQUIRED.
This approach will not work without the space.
Answered By - perreal Answer Checked By - Mary Flores (WPSolving Volunteer)