Bird
Raised Fist0
Bash Scriptingscripting~5 mins

[[ ]] extended test in Bash Scripting - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the [[ ]] syntax represent in bash scripting?
It is an extended test command used for conditional expressions, offering more features and safer syntax than the older [ ] test.
Click to reveal answer
intermediate
How does [[ ]] differ from [ ] in bash?
The [[ ]] supports pattern matching with ==, allows && and || inside without escaping, and prevents word splitting and pathname expansion.
Click to reveal answer
beginner
What is the result of this command: [[ "abc" == a* ]] && echo yes || echo no
It prints 'yes' because [[ ]] supports pattern matching, and 'abc' matches the pattern 'a*'.
Click to reveal answer
intermediate
Can you use regex matching inside [[ ]]? If yes, how?
Yes, using the =~ operator, e.g., [[ $var =~ ^[0-9]+$ ]] tests if $var contains only digits.
Click to reveal answer
intermediate
Why is [[ ]] considered safer than [ ] when testing variables?
Because [[ ]] does not perform word splitting or pathname expansion, it avoids errors when variables contain spaces or special characters.
Click to reveal answer
Which of these is a valid use of [[ ]] in bash?
A[ $name = "John" ]
B[ $name == "John" ]
C[[ $name = "John" ]]
D[[ $name == "John" ]]
What does this command print? [[ 5 -gt 3 && 2 -lt 4 ]] && echo yes || echo no
ANothing
Byes
CSyntax error
Dno
Which operator is used inside [[ ]] for regex matching?
A==
B-eq
C=~
D!=
What happens if a variable with spaces is tested using [ ] without quotes?
AIt causes word splitting and errors
BIt automatically quotes the variable
CIt works fine
DIt ignores spaces
Which is true about [[ ]] in bash?
AIt is a shell keyword, not a command
BIt is an external program
CIt behaves exactly like [ ]
DIt cannot be used with variables
Explain the advantages of using [[ ]] over [ ] in bash scripting.
Think about safety and extra features in condition tests.
You got /4 concepts.
    Describe how to use regex matching inside [[ ]] and give an example.
    Look for the operator that tests patterns, not just equality.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the [[ ]] construct do in a bash script?
      easy
      A. It tests conditions like comparing strings or numbers.
      B. It defines a function in bash.
      C. It creates a new variable.
      D. It runs a command in the background.

      Solution

      1. Step 1: Understand the purpose of [[ ]]

        The [[ ]] syntax is used in bash to test conditions such as string comparison, number comparison, and file checks.
      2. Step 2: Compare with other options

        Options B, C, and D describe other bash features unrelated to [[ ]].
      3. Final Answer:

        It tests conditions like comparing strings or numbers. -> Option A
      4. Quick Check:

        [[ ]] = condition test [OK]
      Hint: Remember: [[ ]] is for testing conditions in bash [OK]
      Common Mistakes:
      • Confusing [[ ]] with function definition syntax
      • Thinking [[ ]] creates variables
      • Assuming [[ ]] runs commands
      2. Which of the following is the correct syntax to check if variable var equals "hello" using [[ ]]?
      easy
      A. [[ $var != "hello" ]]
      B. [[ $var == "hello" ]]
      C. [[ $var === "hello" ]]
      D. [[ $var -eq "hello" ]]

      Solution

      1. Step 1: Identify correct string comparison operator in [[ ]]

        In bash, inside [[ ]], the operator for string equality is ==. -eq is for numeric equality. === is invalid.
      2. Step 2: Check each option

        [[ $var != "hello" ]] checks inequality. [[ $var -eq "hello" ]] uses numeric -eq on string (error). [[ $var === "hello" ]] uses invalid ===. [[ $var == "hello" ]] uses == correctly.
      3. Final Answer:

        [[ $var == "hello" ]] -> Option B
      4. Quick Check:

        String equality in [[ ]] uses == [OK]
      Hint: Use == for string equality inside [[ ]] [OK]
      Common Mistakes:
      • Using === which is invalid in bash
      • Using -eq for string comparison
      • Using != when checking for equality
      3. What will be the output of this script snippet?
      var=5
      if [[ $var -gt 3 && $var -lt 10 ]]; then
      echo "In range"
      else
      echo "Out of range"
      fi
      medium
      A. In range
      B. Out of range
      C. Syntax error
      D. No output

      Solution

      1. Step 1: Evaluate numeric conditions inside [[ ]]

        The variable var is 5. The condition checks if 5 is greater than 3 and less than 10, which is true.
      2. Step 2: Determine which branch runs

        Since the condition is true, the script echoes "In range".
      3. Final Answer:

        In range -> Option A
      4. Quick Check:

        5 > 3 and 5 < 10 = true [OK]
      Hint: Check each numeric condition carefully with && [OK]
      Common Mistakes:
      • Confusing -gt and -lt operators
      • Using single & instead of &&
      • Forgetting to quote variables (not critical here)
      4. Identify the error in this bash snippet:
      filename="test.txt"
      if [[ -f $filename && -r $filename ]]
      then
      echo "File exists and readable"
      fi
      medium
      A. Variable $filename not quoted
      B. Wrong operator for file check
      C. Missing closing bracket "]" for [[ ]]
      D. Missing then keyword

      Solution

      1. Step 1: Check syntax of [[ ]] condition

        The condition starts with [[ and has matching closing ]]. So brackets are correct.
      2. Step 2: Verify other parts

        The then keyword is missing after the condition line, which causes a syntax error.
      3. Final Answer:

        Missing then keyword -> Option D
      4. Quick Check:

        Every if condition must be followed by then [OK]
      Hint: Always include then after if condition [OK]
      Common Mistakes:
      • Forgetting the then keyword
      • Using single [ with && without escaping
      • Ignoring variable quoting warnings
      5. You want to check if a variable input is either "yes" or "y" (case insensitive) using [[ ]]. Which snippet correctly does this?
      hard
      A. [[ $input =~ ^(yes|y)$ ]]
      B. [[ $input == "yes" || $input == "y" ]]
      C. [[ ${input,,} == "yes" || ${input,,} == "y" ]]
      D. [[ $input == "yes" && $input == "y" ]]

      Solution

      1. Step 1: Understand case-insensitive check

        To ignore case, convert input to lowercase using ${input,,} before comparison.
      2. Step 2: Check logical OR condition

        We want to accept either "yes" or "y", so use || between comparisons.
      3. Step 3: Evaluate options

        [[ ${input,,} == "yes" || ${input,,} == "y" ]] correctly converts to lowercase and uses OR. [[ $input == "yes" || $input == "y" ]] lacks case conversion. [[ $input =~ ^(yes|y)$ ]] uses regex but is case-sensitive. [[ $input == "yes" && $input == "y" ]] uses AND which requires both to be true, impossible here.
      4. Final Answer:

        [[ ${input,,} == "yes" || ${input,,} == "y" ]] -> Option C
      5. Quick Check:

        Use ${var,,} for lowercase and || for OR [OK]
      Hint: Use ${var,,} to lowercase and || for OR in [[ ]] [OK]
      Common Mistakes:
      • Not converting input to lowercase
      • Using && instead of || for alternatives
      • Incorrect regex syntax inside [[ ]]
      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