Bird
Raised Fist0
Bash Scriptingscripting~5 mins

String comparisons (=, !=, -z, -n) in Bash Scripting - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: String comparisons (=, !=, -z, -n)
O(n)
Understanding Time Complexity

When we compare strings in bash scripts, it is useful to know how the time taken grows as the strings get longer.

We want to understand how the cost of comparing strings changes with their size.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


str1="$1"
str2="$2"

if [ "$str1" = "$str2" ]; then
  echo "Strings are equal"
else
  echo "Strings are different"
fi

if [ -z "$str1" ]; then
  echo "First string is empty"
fi

This script compares two strings for equality and checks if the first string is empty.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Comparing characters of two strings one by one.
  • How many times: Up to the length of the shorter string, character by character.
How Execution Grows With Input

As the strings get longer, the comparison checks more characters until it finds a difference or reaches the end.

Input Size (n)Approx. Operations
10Up to 10 character comparisons
100Up to 100 character comparisons
1000Up to 1000 character comparisons

Pattern observation: The number of operations grows roughly in direct proportion to the string length.

Final Time Complexity

Time Complexity: O(n)

This means the time to compare strings grows linearly with the length of the strings.

Common Mistake

[X] Wrong: "String comparisons always take the same time no matter how long the strings are."

[OK] Correct: The comparison checks characters one by one, so longer strings usually take more time.

Interview Connect

Understanding how string comparison time grows helps you write efficient scripts and answer questions about performance clearly.

Self-Check

What if we used pattern matching instead of direct string comparison? How would the time complexity change?

Practice

(1/5)
1. Which operator in bash scripting checks if two strings are equal?
easy
A. Using = inside double brackets [[ ]]
B. Using -z to check string length
C. Using != inside double brackets [[ ]]
D. Using -n to check if string is not empty

Solution

  1. Step 1: Understand string equality operator

    In bash, = inside [[ ]] compares if two strings are equal.
  2. Step 2: Differentiate from other operators

    -z checks if string is empty, != checks inequality, -n checks non-empty string.
  3. Final Answer:

    Using = inside double brackets [[ ]] -> Option A
  4. Quick Check:

    String equality = = [OK]
Hint: Use = inside [[ ]] to check if strings are equal [OK]
Common Mistakes:
  • Confusing = with -z or -n
  • Using = outside [[ ]] without quotes
  • Mixing != with = for equality
2. Which of the following is the correct syntax to check if a variable var is not empty in bash?
easy
A. [ -z "$var" ]
B. [ "$var" = "" ]
C. [ -n "$var" ]
D. [ $var != "" ]

Solution

  1. Step 1: Understand -n operator

    -n returns true if the string length is greater than zero (not empty).
  2. Step 2: Check syntax correctness

    Using quotes around $var prevents errors if variable is empty or contains spaces.
  3. Final Answer:

    [ -n "$var" ] -> Option C
  4. Quick Check:

    Not empty check = -n [OK]
Hint: Use [ -n "$var" ] to test if var is not empty [OK]
Common Mistakes:
  • Using -z instead of -n for not empty
  • Forgetting quotes around variable
  • Using = "" to check emptiness incorrectly
3. What will be the output of this bash script snippet?
var="hello"
if [[ "$var" != "world" ]]; then
  echo "Not world"
else
  echo "World"
fi
medium
A. Not world
B. World
C. Syntax error
D. No output

Solution

  1. Step 1: Evaluate string comparison

    Variable var is "hello", which is not equal to "world".
  2. Step 2: Determine which branch runs

    The condition [[ "$var" != "world" ]] is true, so it echoes "Not world".
  3. Final Answer:

    Not world -> Option A
  4. Quick Check:

    hello != world -> Not world [OK]
Hint: If strings differ, != condition is true [OK]
Common Mistakes:
  • Confusing = and != operators
  • Missing quotes causing syntax errors
  • Assuming else branch runs when condition is true
4. Identify the error in this bash snippet that checks if input is empty:
if [ -z $input ]; then
  echo "Empty"
else
  echo "Not empty"
fi
medium
A. Using -z instead of -n
B. Missing quotes around $input in test
C. Using single brackets instead of double brackets
D. No error, script is correct

Solution

  1. Step 1: Check variable quoting in test

    Variable $input is not quoted, which can cause errors if empty or contains spaces.
  2. Step 2: Understand correct syntax

    Quotes around $input like "$input" are needed to safely test emptiness.
  3. Final Answer:

    Missing quotes around $input in test -> Option B
  4. Quick Check:

    Always quote variables in tests [OK]
Hint: Always quote variables in [ ] tests to avoid errors [OK]
Common Mistakes:
  • Forgetting quotes around variables
  • Thinking -z and -n are interchangeable
  • Believing single brackets can't test strings
5. You want to write a bash script that prints "Empty string" if variable text is empty, and "Has content" otherwise. Which snippet correctly does this?
hard
A. if [ "$text" != "" ]; then echo "Empty string"; else echo "Has content"; fi
B. if [[ "$text" = "" ]]; then echo "Has content"; else echo "Empty string"; fi
C. if [ -n "$text" ]; then echo "Empty string"; else echo "Has content"; fi
D. if [[ -z "$text" ]]; then echo "Empty string"; else echo "Has content"; fi

Solution

  1. Step 1: Understand -z usage

    -z "$text" returns true if text is empty.
  2. Step 2: Check echo outputs match condition

    If empty, print "Empty string"; else print "Has content". if [[ -z "$text" ]]; then echo "Empty string"; else echo "Has content"; fi matches this logic correctly.
  3. Final Answer:

    if [[ -z "$text" ]]; then echo "Empty string"; else echo "Has content"; fi -> Option D
  4. Quick Check:

    -z empty -> print "Empty string" [OK]
Hint: Use if [[ -z "$var" ]] for empty string check [OK]
Common Mistakes:
  • Swapping outputs for empty and non-empty cases
  • Using = "" without quotes or wrong logic
  • Confusing -n and -z meanings
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