GGistDev

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