Strings and Arrays
Manipulate strings and arrays safely.
String operations (parameter expansion)
s="/var/log/app.log"
base=${s##*/} # app.log (remove longest prefix up to '/')
dir=${s%/*} # /var/log (remove shortest suffix)
rest=${s#*/} # var/log/app.log
ext=${s##*.} # log
name=${base%.*} # app
Replace and length
msg=${msg//foo/bar} # replace all
len=${#msg} # length
Arrays
arr=(a b "c d")
echo "${arr[0]}" # a
echo "${arr[@]}" # all elements (quoted: preserve items)
arr+=("e f")
Array slicing and splicing
echo "${arr[@]:1:2}" # from index 1, length 2
unset 'arr[1]'
Iteration
for x in "${arr[@]}"; do
echo "$x"
done
Avoid unquoted "${arr[*]}" unless you want a single string joined by IFS.
Associative arrays (bash)
declare -A m
m[lang]=bash
m[ext]=sh
echo "${m[lang]}"
Pitfalls
- Bash arrays are zero-based and sparse; check for unset indices
- Always quote expansions to prevent word splitting/globbing
Summary
- Use parameter expansion for substrings/replacements
- Prefer
"${arr[@]}"for arrays; use associative arrays for key/value maps