String Slicing in Bash (like Python)
A simple function to slice strings in Bash similar to Python's string slicing functionality.
Examples
[silas@pluto ~]$ string_slice "12345" 0 1
1
[silas@pluto ~]$ string_slice "12345" 0 3
123
[silas@pluto ~]$ string_slice "12345" 2 3
3
[silas@pluto ~]$ string_slice "12345" 2 -2
3
[silas@pluto ~]$ string_slice "12345" -3
345
Implementation
function string_slice {
STRING="$1"
declare -i LENGTH="${#STRING}"
declare -i START="$2"
declare -i END="$3"
if [ $START -lt 0 ]; then
START=$[ $LENGTH + $START ]
fi
if [ $END -le 0 ]; then
END=$[ $LENGTH + $END ]
fi
START=$[ $START + 1 ]
(echo "$STRING" | cut -c $START-$END) 2> /dev/null
}