How to Split String Into Array in Bash
- Using the
readCommand to Split a String Into an Array in Bash - Using the
trCommand to Split a String Into an Array in Bash - Using Parameter Expansion to Split a String Into an Array in Bash
This tutorial explains splitting a string into an array in bash using the read command, the tr command, and parameter expansion.
Using the read Command to Split a String Into an Array in Bash
The read command is a built-in command on Linux systems.
It is used to read the content of a line into a variable. It also splits words of a string that is assigned to a shell variable.
In the script below, the variable $addrs string is passed to the read command. The IFS sets the delimiter that acts as a word boundary on the string variable.
This means the - is the word boundary in our case. The -a option tells the read command to store the words that have been split into an array, while the -r option tells the read command to treat any escape characters as they are and not interpret them.
The words that have been split are stored into the ip_array variable. To access the individual elements inside the array, we use this syntax, ${array name[index]}.
In the script below, ip_array is the array name, and 0 is the index denoting the first element in the array.
#!/usr/bin/env bash addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4" IFS=',' read -ra ip_array <<< "$addrs" printf "${ip_array[0]}\n" The output displays the first element in the array.
192.168.8.1 The script below adds a for loop iterating through the array and prints all the elements using the echo command.
#!/usr/bin/env bash addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4" IFS=',' read -r -a ip_array <<< "$addrs" for ip in "${ip_array[@]}" do echo "$ip" done The output below displays all the elements that are inside the array.
192.168.8.1 192.168.8.2 192.168.8.3 192.168.8.4 Using the tr Command to Split a String Into an Array in Bash
The tr command is a short form for translate.
It translates, deletes, and squeezes characters from the standard input and writes the results to the standard output. It is a useful command for manipulating text on the command line or in a bash script.
It can be used to remove repeated characters, convert lowercase to uppercase, and replace characters.
In the bash script below, the echo command pipes the string variable, $addrs, to the tr command, which splits the string variable on a delimiter, ;. Once the string has been split, the values are assigned to the ip_addrs array.
The for loop iterates through the $ip_addrs array and prints out all the values using the printf command.
#!/bin/bash addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4" ip_addrs=(`echo $addrs | tr ',' ' '`) for ip in "${ip_addrs[@]}" do printf "$ip\n" done The output below displays all the elements that are inside the array.
192.168.8.1 192.168.8.2 192.168.8.3 192.168.8.4 Using Parameter Expansion to Split a String Into an Array in Bash
The script below uses parameter expansion to search and replace characters.
The syntax used for for parameter expansion is ${variable//search/replace}. It searches for a pattern that matches search in the variable and replaces it with the replace.
In our case, the script searches for the pattern , and replaces it with a white space in the $addrs string variable. The parenthesis around ${addrs//-/ } are used to define an array of the new string, called ip_array.
We use the for loop to iterate over all the elements of the ip_array and display them using the echo command.
#!/bin/bash addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4" set -f ip_array=(${addrs//,/ }) for ip in "${!ip_array[@]}" do echo "[$ip] ${ip_array[ip]}" done The output below displays all the elements that are inside the array.
[0] 192.168.8.1 [1] 192.168.8.2 [2] 192.168.8.3 [3] 192.168.8.4 Related Article - Bash String
- How to Remove First Character From String in Bash
- How to Remove Newline From String in Bash
- How to Split String Into Variables in Bash
- How to Get Length of String in Bash
- How to Convert String to Integer in Bash
- String Comparison Operator in Bash
