Advanced Bash Scripting

Arrays

Insert

In this lesson, you’ll learn how to efficiently manage Bash arrays by adding, replacing, and inserting elements. Bash arrays allow you to store ordered lists of values, making scripts more powerful and flexible.

Table of Contents

  1. Adding Elements Manually
  2. Efficient Appending via Parameter Expansion
  3. Replacing Elements at a Specific Index
  4. Inserting Elements in the Middle
  5. Method Comparison
  6. Links & References

Adding Elements Manually

You can append items by specifying the next index directly. This approach works but requires you to know or calculate the current array length:

#!/usr/bin/env bash

course_sections=("Introduction" "Coding Standards" "Refresher")
course_sections[3]="Streams"
echo "${course_sections[@]}"
$ ./declare7.sh
Introduction Coding Standards Refresher Streams

Example with a servers array:

#!/usr/bin/env bash

declare -a servers=("server1" "server2" "server3")
servers[3]="server4"
echo "${servers[@]}"
$ ./adding.sh
server1 server2 server3 server4

Note

Manually counting indices can lead to errors in larger scripts. Consider using parameter expansion to automate index calculation.


Efficient Appending via Parameter Expansion

Bash provides ${#array[@]} to retrieve the current number of elements. Since arrays are zero-indexed, this value equals the next available index:

#!/usr/bin/env bash

declare -a servers=("server1" "server2" "server3")
# Append at the next free index
servers[${#servers[@]}]="server4"
echo "${servers[@]}"
$ ./sample2.sh
server1 server2 server3 server4

The image shows a sequence of labeled items, "index0" to "index3" and "server1" to "server4," with a focus on inserting "index2" and "server3" into the sequence.

This method automatically calculates the correct index to append, preventing accidental overwrites.


Replacing Elements at a Specific Index

To overwrite an existing element, assign a new value to that index:

The image explains that inserting an element into an existing index of an array replaces the current value at that index.

#!/usr/bin/env bash

declare -a servers=("server1" "server2" "server3")
servers[1]="serverx"
echo "${servers[@]}"
$ ./array-manipulation3.sh
server1 serverx server3

Warning: Scalar vs Array Assignment

If you omit the index brackets, Bash treats the assignment as a scalar, modifying index 0:

#!/usr/bin/env bash

declare -a servers=("server1" "server2" "server3")
servers="replaced value"
echo "${servers[@]}"
$ ./array-manipulation4.sh
replaced value server2 server3

Inserting Elements in the Middle

To insert an element at a specific position and automatically shift the rest, use array slicing:

#!/usr/bin/env bash

declare -a servers=("server1" "server2" "server3")

# Insert "server1.5" at index 1
servers=(
  "${servers[@]:0:1}"
  "server1.5"
  "${servers[@]:1}"
)

echo "${servers[@]}"
$ ./array-manipulation2.sh
server1 server1.5 server2 server3

Slicing breakdown:

  • ${servers[@]:0:1} → elements up to (but not including) the insertion point
  • "server1.5" → new element
  • ${servers[@]:1} → remaining elements from index 1 onward

Method Comparison

MethodDescriptionExample
Manual IndexingExplicit index assignment; error-proneservers[3]="server4"
Parameter ExpansionAppend at next free indexservers[${#servers[@]}]="server4"
Array SlicingInsert at arbitrary positionservers=( "${servers[@]:0:i}" "new" "${servers[@]:i}" )
Direct Variable Assign.Scalar assignment to index 0 (unexpected)servers="replaced value"

Watch Video

Watch video content

Previous
Arrays
Next
Remove