Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Substring extraction (${var:offset:length}) in Bash Scripting

Choose your learning style10 modes available
Introduction
You use substring extraction to get a part of a text stored in a variable. It helps you pick only the piece you need.
You want to get the first few letters of a filename to check its type.
You need to extract a date from a longer string like '2024-06-15_report.txt'.
You want to get a user ID from a string that contains extra info.
You want to shorten a long message by taking only the first 10 characters.
Syntax
Bash Scripting
${variable:offset:length}
Offset starts at 0, meaning the first character is at position 0.
Length is optional. If you leave it out, it takes all characters from offset to the end.
Examples
Extracts first 5 characters: 'Hello'
Bash Scripting
text="Hello World"
echo ${text:0:5}
Extracts from position 6 to end: 'World'
Bash Scripting
text="Hello World"
echo ${text:6}
Offset 10 is beyond string length, so output is empty
Bash Scripting
text="Hello"
echo ${text:10:3}
Length 5 is longer than remaining string, extracts from offset 1 to end: 'i'
Bash Scripting
text="Hi"
echo ${text:1:5}
Sample Program
This script extracts parts of a date and file type from a filename string using substring extraction. It shows how to get fixed parts by position and length, and also how to get the last characters using a negative offset.
Bash Scripting
#!/bin/bash

full_text="2024-06-15_report.txt"

# Extract year (first 4 characters)
year=${full_text:0:4}

# Extract month (characters 5 and 6)
month=${full_text:5:2}

# Extract day (characters 8 and 9)
day=${full_text:8:2}

# Extract file type (last 3 characters)
file_type=${full_text: -3}

# Print all extracted parts
echo "Year: $year"
echo "Month: $month"
echo "Day: $day"
echo "File type: $file_type"
OutputSuccess
Important Notes
Time complexity is O(length) because it copies the substring characters.
Space complexity is O(length) for the new substring variable.
Common mistake: forgetting that offset starts at 0, so the first character is position 0, not 1.
Use substring extraction when you know exact positions. Use other tools like cut or awk if you need more flexible splitting.
Summary
Substring extraction lets you get part of a string by position and length.
Offset starts at 0, and length is optional.
It is useful for fixed-format strings like dates or filenames.

Practice

(1/5)
1. What does the expression ${var:2:3} do in bash scripting?
easy
A. Extracts 3 characters from var starting at index 2
B. Extracts 2 characters from var starting at index 3
C. Extracts 3 characters from var starting at index 0
D. Extracts the entire string var ignoring offset and length

Solution

  1. Step 1: Understand substring syntax

    The syntax ${var:offset:length} extracts a substring from var starting at offset with length characters.
  2. Step 2: Apply to given expression

    Here, offset is 2 and length is 3, so it extracts 3 characters starting from index 2 (0-based).
  3. Final Answer:

    Extracts 3 characters from var starting at index 2 -> Option A
  4. Quick Check:

    Substring = characters from index 2, length 3 [OK]
Hint: Offset is start index, length is number of chars [OK]
Common Mistakes:
  • Confusing offset with length
  • Forgetting offset starts at 0
  • Assuming length is mandatory
2. Which of the following is the correct syntax to extract 4 characters starting at position 1 from variable text?
easy
A. ${text:1:4}
B. ${text:4:1}
C. ${text:1-4}
D. ${text:1,4}

Solution

  1. Step 1: Recall correct substring syntax

    The correct syntax uses colon separators: ${var:offset:length}.
  2. Step 2: Match syntax to options

    ${text:1:4} matches this exactly with offset 1 and length 4. Others use invalid separators or wrong order.
  3. Final Answer:

    ${text:1:4} -> Option A
  4. Quick Check:

    Correct syntax uses colons [OK]
Hint: Use colons, not commas or dashes [OK]
Common Mistakes:
  • Using commas or dashes instead of colons
  • Swapping offset and length
  • Missing braces around variable
3. Given filename="report2024.txt", what is the output of echo ${filename:6:4}?
medium
A. port
B. 2024
C. 202
D. txt

Solution

  1. Step 1: Identify substring start and length

    Offset is 6, length is 4. The string is "report2024.txt".
  2. Step 2: Extract substring from position 6

    Counting from 0: r(0) e(1) p(2) o(3) r(4) t(5) 2(6) 0(7) 2(8) 4(9). Extract 4 chars starting at index 6: "2024".
  3. Final Answer:

    2024 -> Option B
  4. Quick Check:

    Substring at 6 length 4 = "2024" [OK]
Hint: Count from zero, then take length chars [OK]
Common Mistakes:
  • Starting count at 1 instead of 0
  • Extracting wrong substring length
  • Confusing characters with digits
4. What is wrong with this code snippet?
var="hello world"
echo ${var:5,3}
medium
A. Offset 5 is out of range
B. Length 3 is too large
C. Comma is invalid separator; should use colon
D. Variable name is incorrect

Solution

  1. Step 1: Check substring syntax

    The substring syntax requires colons between offset and length, not commas.
  2. Step 2: Identify error in code

    The code uses a comma ${var:5,3} which is invalid and causes a syntax error.
  3. Final Answer:

    Comma is invalid separator; should use colon -> Option C
  4. Quick Check:

    Use colons, not commas [OK]
Hint: Use colons between offset and length [OK]
Common Mistakes:
  • Using commas instead of colons
  • Assuming offset out of range causes error
  • Misnaming variable
5. You have a date string date="2024-06-15". Which command extracts the month part ("06") using substring extraction?
hard
A. ${date:3:2}
B. ${date:6:2}
C. ${date:4:2}
D. ${date:5:2}

Solution

  1. Step 1: Locate month position in date string

    The string is "2024-06-15". Counting from 0: 2(0) 0(1) 2(2) 4(3) -(4) 0(5) 6(6) -(7) 1(8) 5(9). Month starts at index 5.
  2. Step 2: Extract 2 characters starting at index 5

    Using ${date:5:2} extracts "06" which is the month.
  3. Final Answer:

    ${date:5:2} -> Option D
  4. Quick Check:

    Month = substring at 5 length 2 [OK]
Hint: Count chars from zero, dash counts as char [OK]
Common Mistakes:
  • Starting count at 1 instead of 0
  • Extracting wrong substring length
  • Confusing day and month positions
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard